aboutsummaryrefslogtreecommitdiff
path: root/src/watcher.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/watcher.c')
-rw-r--r--src/watcher.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/watcher.c b/src/watcher.c
index 7ac3d86..9b6c633 100644
--- a/src/watcher.c
+++ b/src/watcher.c
@@ -200,27 +200,33 @@ convert_watcher(struct watchpoint *wpt)
{
char *dirname;
char *filename;
char *new_dirname;
struct handler *hp;
handler_iterator_t itr;
-
+
+ filename = split_pathname(wpt, &dirname);
+
for_each_handler(wpt, itr, hp) {
- if (hp->fnames) {
- /* FIXME: Error message */
+ if (!filpatlist_is_empty(hp->fnames)
+ && filpatlist_match(hp->fnames, filename) == 0) {
+ unsplit_pathname(wpt);
+ diag(LOG_ERR,
+ _("can't convert file watcher %s to directory watcher"),
+ wpt->dirname);
return 1;
}
}
- filename = split_pathname(wpt, &dirname);
for_each_handler(wpt, itr, hp)
filpatlist_add_exact(&hp->fnames, filename);
new_dirname = estrdup(dirname);
unsplit_pathname(wpt);
- diag(LOG_NOTICE, _("watcher %s converted to %s"),
+ diag(LOG_NOTICE,
+ _("file watcher %s converted to directory watcher %s"),
wpt->dirname, new_dirname);
free(wpt->dirname);
wpt->dirname = new_dirname;
return 0;
}
@@ -299,13 +305,12 @@ watchpoint_init(struct watchpoint *wpt)
} else {
diag(LOG_ERR, _("cannot set watcher on %s: %s"),
wpt->dirname, strerror(errno));
return 1;
}
} else if (!S_ISDIR(st.st_mode)) {
- diag(LOG_NOTICE, _("%s is a regular file"), wpt->dirname);
convert_watcher(wpt);
}
for_each_handler(wpt, itr, hp) {
mask.sys_mask |= hp->ev_mask.sys_mask;
mask.gen_mask |= hp->ev_mask.gen_mask;

Return to:

Send suggestions and report system problems to the System administrator.