_public_ int sd_network_monitor_flush(sd_network_monitor *m) { union inotify_event_buffer buffer; struct inotify_event *e; ssize_t l; int fd, k; assert_return(m, -EINVAL); fd = MONITOR_TO_FD(m); l = read(fd, &buffer, sizeof(buffer)); if (l < 0) { if (IN_SET(errno, EAGAIN, EINTR)) return 0; return -errno; } FOREACH_INOTIFY_EVENT(e, buffer, l) { if (e->mask & IN_ISDIR) { k = monitor_add_inotify_watch(fd); if (k < 0) return k; k = inotify_rm_watch(fd, e->wd); if (k < 0) return -errno; } } return 0; }
_public_ sd_network_monitor* sd_network_monitor_unref(sd_network_monitor *m) { int fd; assert_return(m, NULL); fd = MONITOR_TO_FD(m); close_nointr(fd); return NULL; }
_public_ sd_network_monitor* sd_network_monitor_unref(sd_network_monitor *m) { int fd; if (m) { fd = MONITOR_TO_FD(m); close_nointr(fd); } return NULL; }
_public_ int sd_network_monitor_get_fd(sd_network_monitor *m) { assert_return(m, -EINVAL); return MONITOR_TO_FD(m); }
_public_ int sd_network_monitor_flush(sd_network_monitor *m) { assert_return(m, -EINVAL); return flush_fd(MONITOR_TO_FD(m)); }