chiark / gitweb /
[PATCH] add net/atml and class/ppdev to the wait_for_sysfs exception list
[elogind.git] / udevd.c
diff --git a/udevd.c b/udevd.c
index 3ad8c47f22887660e05d5e6ee30d2b63c58e4a40..58f5be94bc42c43f368e1fe9665e5f34d861ab2b 100644 (file)
--- a/udevd.c
+++ b/udevd.c
@@ -38,8 +38,8 @@
 
 #include "list.h"
 #include "udev.h"
-#include "udev_lib.h"
 #include "udev_version.h"
+#include "udev_utils.h"
 #include "udevd.h"
 #include "logging.h"
 
@@ -124,6 +124,7 @@ static void msg_queue_insert(struct hotplug_msg *msg)
 /* forks event and removes event from run queue when finished */
 static void udev_run(struct hotplug_msg *msg)
 {
+       char *const argv[] = { "udev", msg->subsystem, NULL };
        pid_t pid;
 
        pid = fork();
@@ -131,7 +132,8 @@ static void udev_run(struct hotplug_msg *msg)
        case 0:
                /* child */
                close(udevsendsock);
-               execle(udev_bin, "udev", msg->subsystem, NULL, msg->envp);
+               logging_close();
+               execve(udev_bin, argv, msg->envp);
                dbg("exec of child failed");
                _exit(1);
                break;
@@ -290,7 +292,7 @@ static void handle_udevsend_msg(int sock)
        /* copy environment buffer and reconstruct envp */
        memcpy(msg->envbuf, usend_msg.envbuf, envbuf_size);
        bufpos = 0;
-       for (i = 0; (bufpos < envbuf_size) && (i < HOTPLUG_NUM_ENVP-1); i++) {
+       for (i = 0; (bufpos < envbuf_size) && (i < HOTPLUG_NUM_ENVP-2); i++) {
                int keylen;
                char *key;
 
@@ -313,6 +315,7 @@ static void handle_udevsend_msg(int sock)
                if (strncmp(key, "SEQNUM=", 7) == 0)
                        msg->seqnum = strtoull(&key[7], NULL, 10);
        }
+       msg->envp[i++] = "MANAGED_EVENT=1";
        msg->envp[i] = NULL;
 
        /* if no seqnum is given, we move straight to exec queue */