mirror of
https://github.com/systemd/systemd.git
synced 2024-11-05 23:51:28 +03:00
[PATCH] first cut at standalone udev_dbus program.
Will not work, need to finish working on this on a system with dbus installed...
This commit is contained in:
parent
89fe4e00fe
commit
3bfbe50bd8
89
udev_dbus.c
89
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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user