chiark / gitweb /
[PATCH] do not remove real .udev.tdb during RPM build
[elogind.git] / udev.c
diff --git a/udev.c b/udev.c
index 4c67477c202882b6814e97c83005d822053080b8..1c65f2e59c5063753fc92e7c5cb5a134c22ddc1f 100644 (file)
--- a/udev.c
+++ b/udev.c
 #include <ctype.h>
 #include <signal.h>
 
+#include "libsysfs/sysfs/libsysfs.h"
 #include "udev.h"
 #include "udev_version.h"
 #include "udev_dbus.h"
 #include "logging.h"
 #include "namedev.h"
 #include "udevdb.h"
-#include "libsysfs/libsysfs.h"
 
 /* global variables */
 char **main_argv;
 char **main_envp;
 
+#ifdef LOG
+unsigned char logname[42];
+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
+
 static void sig_handler(int signum)
 {
-       dbg("caught signal %d", signum);
        switch (signum) {
                case SIGINT:
                case SIGTERM:
-               case SIGKILL:
                        sysbus_disconnect();
                        udevdb_exit();
                        exit(20 + signum);
-                       break;
                default:
                        dbg("unhandled signal");
        }
@@ -95,16 +107,17 @@ static int udev_hotplug(int argc, char **argv)
        char *subsystem;
        int retval = -EINVAL;
        int i;
+       struct sigaction act;
 
        action = get_action();
        if (!action) {
-               dbg ("no action?");
+               dbg("no action?");
                goto exit;
        }
 
        devpath = get_devpath();
        if (!devpath) {
-               dbg ("no devpath?");
+               dbg("no devpath?");
                goto exit;
        }
        dbg("looking at '%s'", devpath);
@@ -118,6 +131,10 @@ static int udev_hotplug(int argc, char **argv)
 
        /* skip blacklisted subsystems */
        subsystem = argv[1];
+       if (!subsystem) {
+               dbg("no subsystem?");
+               goto exit;
+       }
        i = 0;
        while (subsystem_blacklist[i][0] != '\0') {
                if (strcmp(subsystem, subsystem_blacklist[i]) == 0) {
@@ -141,15 +158,17 @@ static int udev_hotplug(int argc, char **argv)
        }
 
        /* set up a default signal handler for now */
-       signal(SIGINT, sig_handler);
-       signal(SIGTERM, sig_handler);
-       signal(SIGKILL, sig_handler);
+       act.sa_handler = sig_handler;
+       sigemptyset (&act.sa_mask);
+       act.sa_flags = SA_RESTART;
+       sigaction(SIGINT, &act, NULL);
+       sigaction(SIGTERM, &act, NULL);
 
        /* initialize the naming deamon */
        namedev_init();
 
        if (strcmp(action, "add") == 0)
-               retval = udev_add_device(devpath, subsystem);
+               retval = udev_add_device(devpath, subsystem, 0);
 
        else if (strcmp(action, "remove") == 0)
                retval = udev_remove_device(devpath, subsystem);
@@ -176,6 +195,7 @@ int main(int argc, char **argv, char **envp)
        main_argv = argv;
        main_envp = envp;
 
+       init_logging("udev");
        dbg("version %s", UDEV_VERSION);
 
        return udev_hotplug(argc, argv);