chiark / gitweb /
[PATCH] D-BUS patch for udev-008
[elogind.git] / udev-add.c
index ddf432bbc7229312a7522372207898f0709786a1..174331fadeae7318c24894e0fca79ace631d4e7b 100644 (file)
@@ -100,6 +100,42 @@ static int create_path(char *file)
        return 0;
 }
 
        return 0;
 }
 
+#ifdef USE_DBUS
+/** Send out a signal that a device node is created
+ *
+ *  @param  dev                 udevice object
+ *  @param  path                Sysfs path of device
+ */
+static void sysbus_send_create(struct udevice *dev, const char *path)
+{
+        char filename[255];
+        DBusMessage* message;
+        DBusMessageIter iter;
+
+        if (sysbus_connection == NULL)
+                return;
+
+        strncpy(filename, udev_root, sizeof(filename));
+        strncat(filename, dev->name, sizeof(filename));
+
+        /* object, interface, member */
+        message = dbus_message_new_signal("/org/kernel/udev/NodeMonitor", 
+                                          "org.kernel.udev.NodeMonitor",
+                                          "NodeCreated");
+        
+        dbus_message_iter_init(message, &iter);
+        dbus_message_iter_append_string(&iter, filename);
+        dbus_message_iter_append_string(&iter, path);
+
+        if ( !dbus_connection_send(sysbus_connection, message, NULL) )
+                dbg("error sending d-bus signal");
+
+        dbus_message_unref(message);
+        
+        dbus_connection_flush(sysbus_connection);
+}
+#endif /* USE_DBUS */
+
 /*
  * we possibly want to add some symlinks here
  * only numeric owner/group id's are supported
 /*
  * we possibly want to add some symlinks here
  * only numeric owner/group id's are supported
@@ -323,6 +359,12 @@ int udev_add_device(char *path, char *subsystem)
        dbg("name='%s'", dev.name);
        retval = create_node(&dev);
 
        dbg("name='%s'", dev.name);
        retval = create_node(&dev);
 
+#ifdef USE_DBUS
+        if (retval == 0) {
+                sysbus_send_create(&dev, path);
+        }
+#endif /* USE_DBUS */
+
 exit:
        if (class_dev)
                sysfs_close_class_device(class_dev);
 exit:
        if (class_dev)
                sysfs_close_class_device(class_dev);