X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udev_dbus.c;h=a031a41101d4c198b3fdcc75f3bd2b32b24d083f;hp=947a5c1b5da171ce9226ab8bea319a10d98127df;hb=3bfbe50bd85feb2b26327032dc5fb68773cc785f;hpb=8e15f01dc8e25eca49b99e97059dccf793e6c4d4 diff --git a/udev_dbus.c b/udev_dbus.c index 947a5c1b5..a031a4110 100644 --- a/udev_dbus.c +++ b/udev_dbus.c @@ -12,7 +12,22 @@ #include "udev.h" #include "udev_version.h" #include "udev_dbus.h" +#include "logging.h" +#ifdef LOG +unsigned char logname[LOGNAME_SIZE]; +void log_message(int level, const char *format, ...) +{ + va_list args; + + if (!udev_log) + return; + + va_start(args, format); + vsyslog(level, format, args); + va_end(args); +} +#endif /** variable for the connection the to system message bus or #NULL * if we cannot connect or acquire the org.kernel.udev service @@ -20,7 +35,7 @@ static DBusConnection* sysbus_connection; /** Disconnect from the system message bus */ -void sysbus_disconnect(void) +static void sysbus_disconnect(void) { if (sysbus_connection == NULL) return; @@ -30,7 +45,7 @@ void sysbus_disconnect(void) } /** Connect to the system message bus */ -void sysbus_connect(void) +static void sysbus_connect(void) { DBusError error; @@ -67,28 +82,21 @@ void sysbus_connect(void) /** Send out a signal that a device node is created * - * @param dev udevice object + * @param devnode name of the device node, e.g. /dev/sda1 * @param path Sysfs path of device */ -void sysbus_send_create(struct udevice *dev, const char *path) +static void sysbus_send_create(const char *devnode, 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, devnode); dbus_message_iter_append_string(&iter, path); if ( !dbus_connection_send(sysbus_connection, message, NULL) ) @@ -101,28 +109,21 @@ void sysbus_send_create(struct udevice *dev, const char *path) /** Send out a signal that a device node is deleted * - * @param name Name of the device node, e.g. /udev/sda1 + * @param devnode 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) +static void sysbus_send_remove(const char *devnode, 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, devnode); dbus_message_iter_append_string(&iter, path); if ( !dbus_connection_send(sysbus_connection, message, NULL) ) @@ -132,3 +133,48 @@ void sysbus_send_remove(const char* name, const char *path) dbus_connection_flush(sysbus_connection); } + +int main(int argc, char *argv[], char *envp[]) +{ + char *action; + char *devpath; + char *devnode; + int retval = 0; + + init_logging("udev_dbus"); + + sysbus_connect(); + if (sysbus_connection == NULL) + return; + + action = get_action(); + if (!action) { + dbg("no action?"); + goto exit; + } + devpath = get_devpath(); + if (!devpath) { + dbg("no devpath?"); + goto exit; + } + devnode = get_devnode(); + if (!devnode) { + dbg("no devnode?"); + goto exit; + } + + if (strcmp(action, "add") == 0) { + sysbus_send_create(devnode, devpath); + } else { + if (strcmp(action, "remove") == 0) { + sysbus_send_remove(devnode, devpath); + } else { + dbg("unknown action '%s'", action); + retval = -EINVAL; + } + } + +exit: + sysbus_disconnect(); + return retval; +}