diff options
Diffstat (limited to 'src/watcher.c')
-rw-r--r-- | src/watcher.c | 17 |
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; |