}
static int monitor_add_inotify_watch(int fd) {
- int k;
+ int wd;
- k = inotify_add_watch(fd, "/run/systemd/netif/links/", IN_MOVED_TO|IN_DELETE);
- if (k >= 0)
- return 0;
+ wd = inotify_add_watch(fd, "/run/systemd/netif/links/", IN_MOVED_TO|IN_DELETE);
+ if (wd >= 0)
+ return wd;
else if (errno != ENOENT)
return -errno;
- k = inotify_add_watch(fd, "/run/systemd/netif/", IN_CREATE|IN_ISDIR);
- if (k >= 0)
- return 0;
+ wd = inotify_add_watch(fd, "/run/systemd/netif/", IN_CREATE|IN_ISDIR);
+ if (wd >= 0)
+ return wd;
else if (errno != ENOENT)
return -errno;
- k = inotify_add_watch(fd, "/run/systemd/", IN_CREATE|IN_ISDIR);
- if (k < 0)
+ wd = inotify_add_watch(fd, "/run/systemd/", IN_CREATE|IN_ISDIR);
+ if (wd < 0)
return -errno;
- return 0;
+ return wd;
}
int sd_network_monitor_new(sd_network_monitor **m, const char *category) {
int sd_network_monitor_flush(sd_network_monitor *m) {
union inotify_event_buffer buffer;
ssize_t l;
- int fd, k;
+ int fd;
assert_return(m, -EINVAL);
FOREACH_INOTIFY_EVENT(e, buffer, l) {
if (e->mask & IN_ISDIR) {
- k = monitor_add_inotify_watch(fd);
- if (k < 0)
- return k;
+ int wd;
+
+ wd = monitor_add_inotify_watch(fd);
+ if (wd < 0)
+ return wd;
- k = inotify_rm_watch(fd, e->wd);
- if (k < 0)
- return -errno;
+ if (wd != e->wd) {
+ if (inotify_rm_watch(fd, e->wd) < 0)
+ return -errno;
+ }
}
}