summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--udev_dbus.c89
1 files changed, 67 insertions, 22 deletions
diff --git a/udev_dbus.c b/udev_dbus.c
index 7b672ef363..a031a41101 100644
--- a/udev_dbus.c
+++ b/udev_dbus.c
@@ -14,6 +14,20 @@
#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
@@ -21,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;
@@ -31,7 +45,7 @@ void sysbus_disconnect(void)
}
/** Connect to the system message bus */
-void sysbus_connect(void)
+static void sysbus_connect(void)
{
DBusError error;
@@ -68,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;
-
- 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 +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;
-
- 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 +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;
+}