From bd207274add1bd0f8d90e6944bd20cf20bdcfed1 Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Mon, 22 May 2017 15:27:32 +0200 Subject: rwc: add -p to avoid writing into non-empty pipes --- rwc.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'rwc.c') diff --git a/rwc.c b/rwc.c index 1dd293d..a49c53e 100644 --- a/rwc.c +++ b/rwc.c @@ -1,13 +1,15 @@ /* - * rwc [-0d] [PATH...] - report when changed + * rwc [-0dp] [PATH...] - report when changed * -0 use NUL instead of newline for input/output separator * -d detect deletions too (prefixed with "- ") + * -p pipe mode, don't generate new events if stdout pipe is not empty * * To the extent possible under law, Leah Neukirchen * has waived all copyright and related or neighboring rights to this work. * http://creativecommons.org/publicdomain/zero/1.0/ */ +#include #include #include @@ -25,6 +27,7 @@ char ibuf[8192]; int ifd; int dflag; +int pflag; char input_delim = '\n'; static void *root = 0; // tree @@ -90,10 +93,11 @@ main(int argc, char *argv[]) argv0 = argv[0]; - while ((c = getopt(argc, argv, "0d")) != -1) + while ((c = getopt(argc, argv, "0dp")) != -1) switch(c) { case '0': input_delim = 0; break; case 'd': dflag = IN_DELETE | IN_DELETE_SELF; break; + case 'p': pflag++; break; default: fprintf(stderr, "Usage: %s [-0d] [PATH...]\n", argv0); exit(2); @@ -170,6 +174,12 @@ from_stdin: if (tfind(name, &root, order) || tfind(dir, &root, order)) { + if (pflag) { + int n; + ioctl(1, FIONREAD, &n); + if (n > 0) + break; + } printf("%s%s%c", (ev->mask & IN_DELETE ? "- " : ""), name, -- cgit 1.4.1