chiark / gitweb /
edd_id: move persistent rules to its own file
[elogind.git] / udevd.c
diff --git a/udevd.c b/udevd.c
index 7dedf078f3ef91ebea9963830c0845e95e0eedae..8f56de6ffb7670f12e6d732062fcc9d97db68165 100644 (file)
--- a/udevd.c
+++ b/udevd.c
@@ -1102,10 +1102,17 @@ int main(int argc, char *argv[], char *envp[])
 
        /* watch rules directory */
        inotify_fd = inotify_init();
-       if (inotify_fd >= 0)
+       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);
-       else if (errno == ENOSYS)
-               err("the kernel does not support inotify, udevd can't monitor configuration file changes");
+
+               /* 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");
        else
                err("inotify_init failed: %s", strerror(errno));
 
@@ -1190,12 +1197,12 @@ int main(int argc, char *argv[], char *envp[])
                        int nbytes;
 
                        /* discard all possible events, we can just reload the config */
-                       if ((ioctl(inotify_fd, FIONREAD, &nbytes) == 0) && nbytes) {
+                       if ((ioctl(inotify_fd, FIONREAD, &nbytes) == 0) && nbytes > 0) {
                                char *buf;
 
                                reload_config = 1;
                                buf = malloc(nbytes);
-                               if (!buf) {
+                               if (buf == NULL) {
                                        err("error getting buffer for inotify, disable watching");
                                        close(inotify_fd);
                                        inotify_fd = -1;