chiark / gitweb /
[PATCH] move all of the DBUS logic into one file and remove all of the #ifdef crud...
authorgreg@kroah.com <greg@kroah.com>
Mon, 8 Dec 2003 17:40:40 +0000 (09:40 -0800)
committerGreg KH <gregkh@suse.de>
Wed, 27 Apr 2005 04:13:06 +0000 (21:13 -0700)
udev-add.c
udev-remove.c
udev.c
udev.h
udev_dbus.c [new file with mode: 0644]
udev_dbus.h [new file with mode: 0644]

index 174331fadeae7318c24894e0fca79ace631d4e7b..8d45b26077878b3664875e1f448dbf634ce0677b 100644 (file)
@@ -36,6 +36,7 @@
 
 #include "udev.h"
 #include "udev_version.h"
+#include "udev_dbus.h"
 #include "namedev.h"
 #include "udevdb.h"
 #include "libsysfs/libsysfs.h"
@@ -100,42 +101,6 @@ static int create_path(char *file)
        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
@@ -359,11 +324,8 @@ int udev_add_device(char *path, char *subsystem)
        dbg("name='%s'", dev.name);
        retval = create_node(&dev);
 
-#ifdef USE_DBUS
-        if (retval == 0) {
-                sysbus_send_create(&dev, path);
-        }
-#endif /* USE_DBUS */
+       if (retval == 0)
+               sysbus_send_create(&dev, path);
 
 exit:
        if (class_dev)
index 307b907c8897be44a99122adbeca131c8e05e1b8..02c84371a45a5e1ba6712dc26dfec162fc128dba 100644 (file)
@@ -30,6 +30,7 @@
 
 #include "udev.h"
 #include "udev_version.h"
+#include "udev_dbus.h"
 #include "namedev.h"
 #include "udevdb.h"
 #include "libsysfs/libsysfs.h"
@@ -100,42 +101,6 @@ static int delete_node(struct udevice *dev)
        return retval;
 }
 
-#ifdef USE_DBUS
-/** Send out a signal that a device node is deleted
- *
- *  @param  name                Name of the device node, e.g. /udev/sda1
- *  @param  path                Sysfs path of device
- */
-static void sysbus_send_remove(const char* name, const char *path)
-{
-        char filename[255];
-        DBusMessage* message;
-        DBusMessageIter iter;
-
-        if (sysbus_connection == NULL)
-                return;
-
-        strncpy(filename, udev_root, sizeof(filename));
-        strncat(filename, name, sizeof(filename));
-
-        /* object, interface, member */
-        message = dbus_message_new_signal("/org/kernel/udev/NodeMonitor", 
-                                          "org.kernel.udev.NodeMonitor",
-                                          "NodeDeleted");
-        
-        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 */
-
 /*
  * Look up the sysfs path in the database to see if we have named this device
  * something different from the kernel name.  If we have, us it.  If not, use
@@ -159,9 +124,7 @@ int udev_remove_device(char *path, char *subsystem)
        dbg("name is '%s'", dev->name);
        udevdb_delete_dev(path);
 
-#ifdef USE_DBUS
-       sysbus_send_remove(name, device);
-#endif /* USE_DBUS */
-  
+       sysbus_send_remove(name, path);
+
        return delete_node(dev);
 }
diff --git a/udev.c b/udev.c
index 67b86e5916ced757a921bbbd442bee3e876c6298..ac29ec6f4424909fcd9799ec1db1fbeb3dc421ce 100644 (file)
--- a/udev.c
+++ b/udev.c
@@ -31,6 +31,7 @@
 
 #include "udev.h"
 #include "udev_version.h"
+#include "udev_dbus.h"
 #include "namedev.h"
 #include "udevdb.h"
 #include "libsysfs/libsysfs.h"
@@ -63,60 +64,6 @@ static inline char *get_seqnum(void)
        return seqnum;
 }
 
-#ifdef USE_DBUS
-
-/** Global variable for the connection the to system message bus or #NULL
- *  if we cannot connect or acquire the org.kernel.udev service
- */
-DBusConnection* sysbus_connection;
-
-/** Disconnect from the system message bus */
-static void sysbus_disconnect()
-{
-        if (sysbus_connection == NULL)
-                return;
-
-        dbus_connection_disconnect(sysbus_connection);
-        sysbus_connection = NULL;
-}
-
-/** Connect to the system message bus */
-static void sysbus_connect()
-{
-        DBusError error;
-
-        /* Connect to a well-known bus instance, the system bus */
-        dbus_error_init(&error);
-        sysbus_connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
-        if (sysbus_connection == NULL) {
-                dbg("cannot connect to system message bus, error %s: %s", 
-                    error.name, error.message);
-                dbus_error_free(&error);
-                return;
-        }
-
-        /*  Acquire the org.kernel.udev service such that listeners
-         *  know that the message is really from us and not from a
-         *  random attacker. See the file udev_sysbus_policy.conf for
-         *  details.
-         *
-         *  Note that a service can have multiple owners (though there
-         *  is a concept of a primary owner for reception of messages)
-         *  so no race is introduced if two copies of udev is running
-         *  at the same time.
-         */
-        dbus_bus_acquire_service(sysbus_connection, "org.kernel.udev", 0, 
-                                 &error);
-        if (dbus_error_is_set(&error)) {
-                printf("cannot acquire org.kernel.udev service, error %s: %s'",
-                       error.name, error.message);
-                sysbus_disconnect();
-                return;
-        }
-}
-
-#endif /* USE_DBUS */
-
 int main(int argc, char **argv, char **envp)
 {
        char *action;
@@ -165,10 +112,8 @@ int main(int argc, char **argv, char **envp)
        /* initialize our configuration */
        udev_init_config();
 
-#ifdef USE_DBUS
-        /* connect to the system message bus */
-        sysbus_connect();
-#endif /* USE_DBUS */
+       /* connect to the system message bus */
+       sysbus_connect();
 
        /* initialize udev database */
        retval = udevdb_init(UDEVDB_DEFAULT);
@@ -192,11 +137,9 @@ int main(int argc, char **argv, char **envp)
        }
        udevdb_exit();
 
-#ifdef USE_DBUS
-        /* disconnect from the system message bus */
-        sysbus_disconnect();
-#endif /* USE_DBUS */
+       /* disconnect from the system message bus */
+       sysbus_disconnect();
 
-exit:  
+exit:
        return retval;
 }
diff --git a/udev.h b/udev.h
index 4ea04d5e715093b9d451ea82e8d5e801ba6cbaae..05f6b3c2256be08a72860b7399e09c8ed24b2364 100644 (file)
--- a/udev.h
+++ b/udev.h
@@ -93,13 +93,4 @@ extern char udev_config_filename[PATH_MAX+NAME_MAX];
 extern char udev_rules_filename[PATH_MAX+NAME_MAX];
 extern char default_mode_str[NAME_MAX];
 
-#ifdef USE_DBUS
-
-#define DBUS_API_SUBJECT_TO_CHANGE
-#include <dbus/dbus.h>
-
-extern DBusConnection* sysbus_connection;
-
-#endif /* USE_DBUS */
-
 #endif
diff --git a/udev_dbus.c b/udev_dbus.c
new file mode 100644 (file)
index 0000000..5768516
--- /dev/null
@@ -0,0 +1,126 @@
+#define DBUS_API_SUBJECT_TO_CHANGE
+#include <dbus/dbus.h>
+
+#include "udev_dbus.h"
+
+
+/** variable for the connection the to system message bus or #NULL
+ *  if we cannot connect or acquire the org.kernel.udev service
+ */
+static DBusConnection* sysbus_connection;
+
+/** Disconnect from the system message bus */
+void sysbus_disconnect(void)
+{
+        if (sysbus_connection == NULL)
+                return;
+
+        dbus_connection_disconnect(sysbus_connection);
+        sysbus_connection = NULL;
+}
+
+/** Connect to the system message bus */
+void sysbus_connect(void)
+{
+        DBusError error;
+
+        /* Connect to a well-known bus instance, the system bus */
+        dbus_error_init(&error);
+        sysbus_connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
+        if (sysbus_connection == NULL) {
+                dbg("cannot connect to system message bus, error %s: %s", 
+                    error.name, error.message);
+                dbus_error_free(&error);
+                return;
+        }
+
+        /*  Acquire the org.kernel.udev service such that listeners
+         *  know that the message is really from us and not from a
+         *  random attacker. See the file udev_sysbus_policy.conf for
+         *  details.
+         *
+         *  Note that a service can have multiple owners (though there
+         *  is a concept of a primary owner for reception of messages)
+         *  so no race is introduced if two copies of udev is running
+         *  at the same time.
+         */
+        dbus_bus_acquire_service(sysbus_connection, "org.kernel.udev", 0, 
+                                 &error);
+        if (dbus_error_is_set(&error)) {
+                printf("cannot acquire org.kernel.udev service, error %s: %s'",
+                       error.name, error.message);
+                sysbus_disconnect();
+                return;
+        }
+}
+
+
+/** Send out a signal that a device node is created
+ *
+ *  @param  dev                 udevice object
+ *  @param  path                Sysfs path of device
+ */
+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);
+}
+
+/** Send out a signal that a device node is deleted
+ *
+ *  @param  name                Name of the device node, e.g. /udev/sda1
+ *  @param  path                Sysfs path of device
+ */
+void sysbus_send_remove(const char* name, const char *path)
+{
+        char filename[255];
+        DBusMessage* message;
+        DBusMessageIter iter;
+
+        if (sysbus_connection == NULL)
+                return;
+
+        strncpy(filename, udev_root, sizeof(filename));
+        strncat(filename, name, sizeof(filename));
+
+        /* object, interface, member */
+        message = dbus_message_new_signal("/org/kernel/udev/NodeMonitor", 
+                                          "org.kernel.udev.NodeMonitor",
+                                          "NodeDeleted");
+        
+        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);
+}
+
+
diff --git a/udev_dbus.h b/udev_dbus.h
new file mode 100644 (file)
index 0000000..afa2046
--- /dev/null
@@ -0,0 +1,23 @@
+#ifndef UDEV_DBUS_H
+#define UDEV_DBUS_H
+
+
+#ifdef USE_DBUS
+
+extern void sysbus_connect(void);
+extern void sysbus_disconnect(void);
+extern void sysbus_send_create(struct udevice *dev, const char *path);
+extern void sysbus_send_remove(const char* name, const char *path);
+#else
+
+static inline void sysbus_connect(void) { }
+static inline void sysbus_disconnect(void) { }
+static inline void sysbus_send_create(struct udevice *dev, const char *path) { }
+static inline void sysbus_send_remove(const char* name, const char *path) { }
+
+#endif /* USE_DBUS */
+
+
+
+#endif