chiark / gitweb /
[PATCH] $local user
[elogind.git] / udevd.c
diff --git a/udevd.c b/udevd.c
index 2bcb4a9e1ec4fd7d8b3cc525b4e8534d71274702..421c25a6e8df7fcdf8eb9ba31e0730bd1ba9f06a 100644 (file)
--- a/udevd.c
+++ b/udevd.c
@@ -35,6 +35,7 @@
 #include <fcntl.h>
 #include "klibc_fixups.h"
 #include <sys/sysinfo.h>
+#include <sys/stat.h>
 
 #include "list.h"
 #include "udev.h"
@@ -149,7 +150,7 @@ static void udev_run(struct hotplug_msg *msg)
                /* child */
                execle(udev_bin, "udev", msg->subsystem, NULL, env);
                dbg("exec of child failed");
-               exit(1);
+               _exit(1);
                break;
        case -1:
                dbg("fork of child failed");
@@ -308,7 +309,7 @@ skip:
        return;
 }
 
-asmlinkage static void sig_handler(int signum)
+static void asmlinkage sig_handler(int signum)
 {
        int rc;
 
@@ -402,7 +403,7 @@ int main(int argc, char *argv[])
        struct sigaction act;
        fd_set readfds;
 
-       init_logging("udevd");
+       logging_init("udevd");
        dbg("version %s", UDEV_VERSION);
 
        if (getuid() != 0) {
@@ -457,7 +458,7 @@ int main(int argc, char *argv[])
 
        
        /* set signal handlers */
-       act.sa_handler = sig_handler;
+       act.sa_handler = (void (*) (int))sig_handler;
        sigemptyset(&act.sa_mask);
        act.sa_flags = SA_RESTART;
        sigaction(SIGINT, &act, NULL);
@@ -477,6 +478,8 @@ int main(int argc, char *argv[])
                exit(1);
        }
 
+       set_cloexec_flag(ssock, 1);
+
        /* the bind takes care of ensuring only one copy running */
        retval = bind(ssock, (struct sockaddr *) &saddr, addrlen);
        if (retval < 0) {
@@ -546,5 +549,6 @@ int main(int argc, char *argv[])
        }
 exit:
        close(ssock);
+       logging_close();
        exit(1);
 }