X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udev_dbus.c;h=7e767040f0f3f9eeed98e67b70b28b33234f5081;hp=7b672ef363e33454192dc635d8f667a86dffb0c3;hb=c5039077b710dca041b2b36a3fc3247964abc069;hpb=c472e3c89b9aaad90ad6398c0d2ff5dcf5a9d238 diff --git a/udev_dbus.c b/udev_dbus.c index 7b672ef36..7e767040f 100644 --- a/udev_dbus.c +++ b/udev_dbus.c @@ -10,10 +10,23 @@ #include #include "udev.h" -#include "udev_version.h" -#include "udev_dbus.h" +#include "udev_lib.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 @@ -21,7 +34,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; @@ -31,7 +44,7 @@ void sysbus_disconnect(void) } /** Connect to the system message bus */ -void sysbus_connect(void) +static void sysbus_connect(void) { DBusError error; @@ -68,28 +81,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; - - strfieldcpy(filename, udev_root); - strfieldcat(filename, dev->name); - /* 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) ) @@ -102,28 +108,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; - - strfieldcpy(filename, udev_root); - strfieldcat(filename, name); - /* 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) ) @@ -133,3 +132,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 0; + + 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; +}