URI: 
       tnow read filenames from stdin - 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 496ea93e3942b856d01b7a955c6e069b3828644b
   DIR parent 58885b792ec33031cf7a397faf61cc071e79eb31
  HTML Author: z3bra <willy@mailoo.org>
       Date:   Mon, 30 Mar 2015 20:43:07 +0200
       
       now read filenames from stdin
       
       Diffstat:
         M wendy.c                             |      36 ++++++++++++++++++++++++++++---
       
       1 file changed, 33 insertions(+), 3 deletions(-)
       ---
   DIR diff --git a/wendy.c b/wendy.c
       t@@ -95,6 +95,28 @@ list_events()
            exit(0);
        }
        
       +    char *
       +read_filename(int fd)
       +{
       +    int i;
       +    char *fn = NULL, ch;
       +
       +    fn = malloc(PATH_MAX);
       +    if (!fn)
       +        return NULL;
       +
       +    for (i=0; read(fd, &ch, 1) > 0 && i < PATH_MAX; i++) {
       +        if (ch == 0 || ch == '\n') {
       +            *(fn + i + 1) = 0;
       +            return fn;
       +        } else {
       +            *(fn+i) = ch;
       +        }
       +    }
       +
       +    return NULL;
       +}
       +
            int
        execvpe(const char *program, char **argv, char **envp)
        {
       t@@ -141,9 +163,11 @@ watch_node(int fd, const char *path, uint32_t mask)
        {
            int wd = -1;
        
       +    if (!path)
       +        return -1;
       +
            /* add a watcher on the file */
            wd  = inotify_add_watch(fd, path, mask);
       -
            if (wd < 0) {
                perror("inotify_add_watch");
                exit(1);
       t@@ -161,6 +185,7 @@ main (int argc, char **argv)
            int  fd, len, i = 0, timeout = 0, ignore = 0;
            uint32_t mask = 0;
            char buf[BUF_LEN];
       +    char *fn = NULL;
            char **cmd = NULL;
            struct inotify_event *ev;
        
       t@@ -191,12 +216,17 @@ main (int argc, char **argv)
            /* test given arguments */
            if (!timeout)   { timeout = DEFAULT_CHECK; }
        
       +    if (!nb) {
       +        while ((fn = read_filename(0)) != NULL)
       +            watch_node(fd, fn, mask);
       +
       +        free(fn);
       +    }
       +
            /* start looping */
            while (nb>0) {
       -
                /* get every event raised, and queue them */
                len = read(fd, buf, BUF_LEN);
       -
                if (!len || len < 0) {
                    perror("read");
                }