/* * To compile: * * gcc -Wall -pedantic dbus_connection_register_force_oom.c `pkg-config dbus-1 --cflags --libs` */ #include #include #include #include #include #include DBusHandlerResult message_function(DBusConnection *bus, DBusMessage *msg, void *user_data) { return (DBusHandlerResult) TRUE; } void unregister_function(DBusConnection *connection, void *user_data) { } int main(int argc, char *argv[]) { DBusConnection *connection; DBusError error; int request_name_reply; const char *path = "/com/fred/foo/_"; const char *name = "com.ubuntu"; dbus_bool_t rc; DBusObjectPathVTable dbus_object_vtable = { unregister_function, message_function }; dbus_error_init (&error); connection = dbus_bus_get( DBUS_BUS_SESSION, &error); if (connection == NULL || dbus_error_is_set(&error) ) { fprintf(stderr, "Failed to open connection to bus: %s\n", error.message); dbus_error_free(&error); exit(EXIT_FAILURE); } rc = dbus_bus_name_has_owner(connection, name, &error); if ( rc || dbus_error_is_set(&error) ) { fprintf(stderr, "DBus Error: %s\n", error.message); dbus_error_free(&error); exit(EXIT_FAILURE); } request_name_reply = dbus_bus_request_name(connection, name, DBUS_NAME_FLAG_DO_NOT_QUEUE, &error); if ( dbus_error_is_set(&error)) { fprintf(stderr, "Error requesting a bus name: %s (%s)\n", error.message, error.name); dbus_error_free (&error); exit(EXIT_FAILURE); } if ( request_name_reply != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER ) { fprintf(stderr, "Failed to reserve name %s\n", name); exit(EXIT_FAILURE); } while ( 1 ) { /* ignore rc and wait to die */ (void)dbus_connection_register_object_path(connection, path, &dbus_object_vtable, NULL); } dbus_connection_unref (connection); exit (EXIT_SUCCESS); }