URI: 
       tRead path from stdin when none provided - wendy - watch files/directories and run commands on any event
  HTML git clone git://z3bra.org/wendy
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 4ff6468aa26d8c9c7b85ca6cf6eac680e4d1ccc4
   DIR parent 5d5db1f773592dcba430662794f3cc33e8084559
  HTML Author: Willy Goiffon <dev@z3bra.org>
       Date:   Wed,  4 Mar 2020 15:08:10 +0100
       
       Read path from stdin when none provided
       
       Diffstat:
         M wendy.1                             |       6 +++++-
         M wendy.c                             |      19 +++++++++++++++++++
       
       2 files changed, 24 insertions(+), 1 deletion(-)
       ---
   DIR diff --git a/wendy.1 b/wendy.1
       t@@ -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
   DIR diff --git a/wendy.c b/wendy.c
       t@@ -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)
        {
       t@@ -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 */