aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/direvent.h4
-rw-r--r--src/fnpat.c8
-rw-r--r--src/watcher.c17
3 files changed, 22 insertions, 7 deletions
diff --git a/src/direvent.h b/src/direvent.h
index d69fa34..416d833 100644
--- a/src/direvent.h
+++ b/src/direvent.h
@@ -307,8 +307,10 @@ int sigv_set_tab(int sigc, struct sigtab *sigtab, struct sigaction *retsa);
int sigv_set_action_tab(int sigc, struct sigtab *sigtab, struct sigaction *sa);
struct grecs_locus;
-int filpatlist_add(filpatlist_t *fptr, char const *arg, struct grecs_locus *loc);
+int filpatlist_add(filpatlist_t *fptr, char const *arg,
+ struct grecs_locus *loc);
void filpatlist_add_exact(filpatlist_t *fptr, char const *arg);
void filpatlist_destroy(filpatlist_t *fptr);
int filpatlist_match(filpatlist_t fp, const char *name);
+int filpatlist_is_empty(filpatlist_t fp);
diff --git a/src/fnpat.c b/src/fnpat.c
index 5a98053..3e282b3 100644
--- a/src/fnpat.c
+++ b/src/fnpat.c
@@ -137,6 +137,14 @@ filpatlist_destroy(filpatlist_t *fptr)
}
int
+filpatlist_is_empty(filpatlist_t fp)
+{
+ if (!fp)
+ return 1;
+ return grecs_list_size(fp->list) == 0;
+}
+
+int
filpatlist_match(filpatlist_t fp, const char *name)
{
struct grecs_list_entry *ep;
diff --git a/src/watcher.c b/src/watcher.c
index 7ac3d86..9b6c633 100644
--- a/src/watcher.c
+++ b/src/watcher.c
@@ -203,21 +203,27 @@ convert_watcher(struct watchpoint *wpt)
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);
@@ -302,7 +308,6 @@ watchpoint_init(struct watchpoint *wpt)
return 1;
}
} else if (!S_ISDIR(st.st_mode)) {
- diag(LOG_NOTICE, _("%s is a regular file"), wpt->dirname);
convert_watcher(wpt);
}

Return to:

Send suggestions and report system problems to the System administrator.