commit 4ff6468aa26d8c9c7b85ca6cf6eac680e4d1ccc4
parent 5d5db1f773592dcba430662794f3cc33e8084559
Author: Willy Goiffon <dev@z3bra.org>
Date: Wed, 4 Mar 2020 15:08:10 +0100
Read path from stdin when none provided
Diffstat:
2 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/wendy.1 b/wendy.1
@@ -35,7 +35,11 @@ default: IN_CREATE|IN_DELETE|IN_DELETE_SELF|IN_MODIFY|IN_MOVE|IN_MOVE_SELF|IN_CL
Specifies the file or directory to watch events in. You can specify multiple
files by providing the
.Fl w
-flag multiple times.
+flag multiple times. If no watcher is added with the -w flag,
+.Nm
+will read path names from
+.Ar stdin ,
+one per line.
.El
.Sh MASKS
The mask is a numeric value passed to inotify to specify the events that should
diff --git a/wendy.c b/wendy.c
@@ -87,6 +87,22 @@ watch(int fd, char *pathname, int mask)
return w;
}
+int
+watchstream(int fd, FILE *stream, int mask)
+{
+ ssize_t l, n = 0;
+ char *p = NULL;
+
+ while (getline(&p, &n, stream) > 0) {
+ l = strlen(p);
+ p[l-1] = '\0';
+ watch(fd, p, mask);
+ }
+ free(p);
+
+ return 0;
+}
+
char *
wdpath(struct inotify_event *e, struct watcher *w)
{
@@ -143,6 +159,9 @@ main (int argc, char **argv)
if (dflag)
mask |= IN_ONLYDIR;
+ if (SLIST_EMPTY(&head))
+ watchstream(fd, stdin, mask);
+
while (!SLIST_EMPTY(&head) && (off || (len=read(fd, buf, EVSZ))>0)) {
/* cast buffer into the event structure */