X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fdbus.c;h=93a19a45cd111321827a3d86d03674da60fa475d;hb=19bc719ec28e731159671b06254d9bfd49014894;hp=187ed303b465647ecf7d3c627a420fe05375d6ef;hpb=44143309dd0b37d61d7d842ca58f01a65646ec71;p=elogind.git diff --git a/src/dbus.c b/src/dbus.c index 187ed303b..93a19a45c 100644 --- a/src/dbus.c +++ b/src/dbus.c @@ -91,41 +91,6 @@ static void bus_dispatch_status(DBusConnection *bus, DBusDispatchStatus status, set_move_one(m->bus_connections_for_dispatch, m->bus_connections, bus); } -static uint32_t bus_flags_to_events(DBusWatch *bus_watch) { - unsigned flags; - uint32_t events = 0; - - assert(bus_watch); - - /* no watch flags for disabled watches */ - if (!dbus_watch_get_enabled(bus_watch)) - return 0; - - flags = dbus_watch_get_flags(bus_watch); - - if (flags & DBUS_WATCH_READABLE) - events |= EPOLLIN; - if (flags & DBUS_WATCH_WRITABLE) - events |= EPOLLOUT; - - return events | EPOLLHUP | EPOLLERR; -} - -static unsigned events_to_bus_flags(uint32_t events) { - unsigned flags = 0; - - if (events & EPOLLIN) - flags |= DBUS_WATCH_READABLE; - if (events & EPOLLOUT) - flags |= DBUS_WATCH_WRITABLE; - if (events & EPOLLHUP) - flags |= DBUS_WATCH_HANGUP; - if (events & EPOLLERR) - flags |= DBUS_WATCH_ERROR; - - return flags; -} - void bus_watch_event(Manager *m, Watch *w, int events) { assert(m); assert(w); @@ -136,7 +101,7 @@ void bus_watch_event(Manager *m, Watch *w, int events) { if (!dbus_watch_get_enabled(w->data.bus_watch)) return; - dbus_watch_handle(w->data.bus_watch, events_to_bus_flags(events)); + dbus_watch_handle(w->data.bus_watch, bus_events_to_flags(events)); } static dbus_bool_t bus_add_watch(DBusWatch *bus_watch, void *data) { @@ -196,7 +161,8 @@ static void bus_remove_watch(DBusWatch *bus_watch, void *data) { assert(bus_watch); assert(m); - if (!(w = dbus_watch_get_data(bus_watch))) + w = dbus_watch_get_data(bus_watch); + if (!w) return; assert(w->type == WATCH_DBUS_WATCH); @@ -216,7 +182,10 @@ static void bus_toggle_watch(DBusWatch *bus_watch, void *data) { assert(bus_watch); assert(m); - assert_se(w = dbus_watch_get_data(bus_watch)); + w = dbus_watch_get_data(bus_watch); + if (!w) + return; + assert(w->type == WATCH_DBUS_WATCH); zero(ev); @@ -304,10 +273,12 @@ static void bus_remove_timeout(DBusTimeout *timeout, void *data) { assert(timeout); assert(m); - if (!(w = dbus_timeout_get_data(timeout))) + w = dbus_timeout_get_data(timeout); + if (!w) return; assert(w->type == WATCH_DBUS_TIMEOUT); + assert_se(epoll_ctl(m->epoll_fd, EPOLL_CTL_DEL, w->fd, NULL) >= 0); close_nointr_nofail(w->fd); free(w); @@ -321,7 +292,10 @@ static void bus_toggle_timeout(DBusTimeout *timeout, void *data) { assert(timeout); assert(m); - assert_se(w = dbus_timeout_get_data(timeout)); + w = dbus_timeout_get_data(timeout); + if (!w) + return; + assert(w->type == WATCH_DBUS_TIMEOUT); if ((r = bus_timeout_arm(m, w)) < 0) @@ -472,7 +446,7 @@ static DBusHandlerResult system_bus_message_filter(DBusConnection *connection, D if (!dbus_message_get_args(message, &error, DBUS_TYPE_STRING, &cgroup, DBUS_TYPE_INVALID)) - log_error("Failed to parse Released message: %s", error.message); + log_error("Failed to parse Released message: %s", bus_error_message(&error)); else cgroup_notify_empty(m, cgroup); } @@ -819,7 +793,7 @@ static int bus_init_system(Manager *m) { if (!dbus_connection_add_filter(m->system_bus, system_bus_message_filter, m, NULL)) { log_error("Not enough memory"); - r = -EIO; + r = -ENOMEM; goto fail; } @@ -1238,55 +1212,6 @@ int bus_broadcast(Manager *m, DBusMessage *message) { return oom ? -ENOMEM : 0; } -int bus_parse_strv(DBusMessage *m, char ***_l) { - DBusMessageIter iter, sub; - unsigned n = 0, i = 0; - char **l; - - assert(m); - assert(_l); - - if (!dbus_message_iter_init(m, &iter) || - dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY || - dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_STRING) - return -EINVAL; - - dbus_message_iter_recurse(&iter, &sub); - - while (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_INVALID) { - n++; - dbus_message_iter_next(&sub); - } - - if (!(l = new(char*, n+1))) - return -ENOMEM; - - assert_se(dbus_message_iter_init(m, &iter)); - dbus_message_iter_recurse(&iter, &sub); - - while (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_INVALID) { - const char *s; - - assert_se(dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_STRING); - dbus_message_iter_get_basic(&sub, &s); - - if (!(l[i++] = strdup(s))) { - strv_free(l); - return -ENOMEM; - } - - dbus_message_iter_next(&sub); - } - - assert(i == n); - l[i] = NULL; - - if (_l) - *_l = l; - - return 0; -} - bool bus_has_subscriber(Manager *m) { Iterator i; DBusConnection *c;