chiark / gitweb /
move default rules from /etc/udev/rules.d/ to /lib/udev/rules.d/
[elogind.git] / udevd.c
diff --git a/udevd.c b/udevd.c
index c895c1dc6a4a4384fb1d4280d0eb8772e1a0db50..0827a5ceb32551b41520caa4414c82b774b1483f 100644 (file)
--- a/udevd.c
+++ b/udevd.c
@@ -269,6 +269,9 @@ static void msg_queue_insert(struct udevd_uevent_msg *msg)
 
        msg->queue_time = time(NULL);
 
+       export_event_state(msg, EVENT_QUEUED);
+       info("seq %llu queued, '%s' '%s'\n", msg->seqnum, msg->action, msg->subsystem);
+
        strlcpy(filename, udev_root, sizeof(filename));
        strlcat(filename, "/" EVENT_SEQNUM, sizeof(filename));
        fd = open(filename, O_WRONLY|O_TRUNC|O_CREAT, 0644);
@@ -281,9 +284,6 @@ static void msg_queue_insert(struct udevd_uevent_msg *msg)
                close(fd);
        }
 
-       export_event_state(msg, EVENT_QUEUED);
-       info("seq %llu queued, '%s' '%s'\n", msg->seqnum, msg->action, msg->subsystem);
-
        /* run one event after the other in debug mode */
        if (debug_trace) {
                list_add_tail(&msg->node, &running_list);
@@ -1142,14 +1142,23 @@ int main(int argc, char *argv[], char *envp[])
        /* watch rules directory */
        inotify_fd = inotify_init();
        if (inotify_fd >= 0) {
-               char filename[PATH_MAX];
-
-               inotify_add_watch(inotify_fd, udev_rules_dir, IN_CREATE | IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
-
-               /* watch dynamic rules directory */
-               strlcpy(filename, udev_root, sizeof(filename));
-               strlcat(filename, "/"RULES_DYN_DIR, sizeof(filename));
-               inotify_add_watch(inotify_fd, filename, IN_CREATE | IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
+               if (udev_rules_dir[0] != '\0') {
+                       inotify_add_watch(inotify_fd, udev_rules_dir,
+                                         IN_CREATE | IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
+               } else {
+                       char filename[PATH_MAX];
+
+                       inotify_add_watch(inotify_fd, RULES_LIB_DIR,
+                                         IN_CREATE | IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
+                       inotify_add_watch(inotify_fd, RULES_ETC_DIR,
+                                         IN_CREATE | IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
+
+                       /* watch dynamic rules directory */
+                       strlcpy(filename, udev_root, sizeof(filename));
+                       strlcat(filename, "/"RULES_DYN_DIR, sizeof(filename));
+                       inotify_add_watch(inotify_fd, filename,
+                                         IN_CREATE | IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
+               }
        } else if (errno == ENOSYS)
                err("the kernel does not support inotify, udevd can't monitor rules file changes\n");
        else