int bus_open_transport(BusTransport transport, const char *host, bool user, sd_bus **bus) { int r; assert(transport >= 0); assert(transport < _BUS_TRANSPORT_MAX); assert(bus); assert_return((transport == BUS_TRANSPORT_LOCAL) == !host, -EINVAL); assert_return(transport == BUS_TRANSPORT_LOCAL || !user, -ENOTSUP); switch (transport) { case BUS_TRANSPORT_LOCAL: if (user) r = sd_bus_default_user(bus); else r = sd_bus_default_system(bus); break; case BUS_TRANSPORT_REMOTE: r = sd_bus_open_system_remote(bus, host); break; case BUS_TRANSPORT_CONTAINER: r = sd_bus_open_system_container(bus, host); break; default: assert_not_reached("Hmm, unknown transport type."); } return r; }
int kirstu_dbus_init(void) { int r = sd_bus_default_user(&bus); if (r < 0) { fprintf(stderr, "Failed to connect to system bus: %s\n", strerror(-r)); exit(EXIT_FAILURE); } r = sd_bus_add_object_vtable(bus, &slot, "/org/freedesktop/Notifications", "org.freedesktop.Notifications", vtable, NULL); if (r < 0) { fprintf(stderr, "Failed to issue method call: %s\n", strerror(-r)); exit(EXIT_FAILURE); } r = sd_bus_request_name(bus, "org.freedesktop.Notifications", 0); if (r < 0) { fprintf(stderr, "Failed to acquire service name: %s\n", strerror(-r)); exit(EXIT_FAILURE); } return sd_bus_get_fd(bus); }