- if ((size_t) k < sizeof(struct inotify_event) ||
- (size_t) k < sizeof(struct inotify_event) + buf->len) {
- log_error("inotify event too small.");
- goto fail;
+ /* If we are already running, then remember that one event was
+ * dispatched so that we restart the service only if something
+ * actually changed on disk */
+ p->inotify_triggered = true;
+
+ e = (struct inotify_event*) buf;
+
+ changed = false;
+ while (k > 0) {
+ size_t step;
+
+ if (s->type == PATH_CHANGED && s->primary_wd == e->wd)
+ changed = true;
+
+ step = sizeof(struct inotify_event) + e->len;
+ assert(step <= (size_t) k);
+
+ e = (struct inotify_event*) ((uint8_t*) e + step);
+ k -= step;