X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=udevd.c;h=8f56de6ffb7670f12e6d732062fcc9d97db68165;hb=fcfeda1907035a3d3c7afc67ad38b032b87f36d9;hp=7dedf078f3ef91ebea9963830c0845e95e0eedae;hpb=274da2b23d37f2dd174f765e9cfcc485e4a5a898;p=elogind.git diff --git a/udevd.c b/udevd.c index 7dedf078f..8f56de6ff 100644 --- 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;