diff options
author | June McEnroe <june@causal.agency> | 2021-02-27 15:44:24 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2021-02-27 15:44:24 -0500 |
commit | c7b117f37a71755912b53dd847eb3f281c15da27 (patch) | |
tree | 0fcf7db5cdbd5b0d31d213ec667db8142e2b0095 | |
parent | Add catsit-timer utility (diff) | |
download | catsit-c7b117f37a71755912b53dd847eb3f281c15da27.tar.gz catsit-c7b117f37a71755912b53dd847eb3f281c15da27.zip |
Add -a to catsit-watch
-rw-r--r-- | catsit-watch.1 | 9 | ||||
-rw-r--r-- | catsit-watch.c | 17 |
2 files changed, 21 insertions, 5 deletions
diff --git a/catsit-watch.1 b/catsit-watch.1 index b45f704..892fd18 100644 --- a/catsit-watch.1 +++ b/catsit-watch.1 @@ -1,4 +1,4 @@ -.Dd February 25, 2021 +.Dd February 27, 2021 .Dt CATSIT-WATCH 1 .Os . @@ -8,7 +8,7 @@ . .Sh SYNOPSIS .Nm -.Op Fl i +.Op Fl ai .Op Fl f Ar file .Ar command ... . @@ -26,6 +26,11 @@ exits. .Pp The arguments are as follows: .Bl -tag -width Ds +.It Fl a +Append the path of +the modified file +to the arguments of +.Ar command . .It Fl f Ar file Add .Ar file diff --git a/catsit-watch.c b/catsit-watch.c index 4d0840c..ea64155 100644 --- a/catsit-watch.c +++ b/catsit-watch.c @@ -20,6 +20,7 @@ #include <fcntl.h> #include <stdio.h> #include <stdlib.h> +#include <string.h> #include <sys/event.h> #include <sys/time.h> #include <sys/wait.h> @@ -64,8 +65,10 @@ int main(int argc, char *argv[]) { fcntl(kq, F_SETFD, FD_CLOEXEC); int init = 0; - for (int opt; 0 < (opt = getopt(argc, argv, "f:i"));) { + int append = 0; + for (int opt; 0 < (opt = getopt(argc, argv, "af:i"));) { switch (opt) { + break; case 'a': append = 1; break; case 'f': watch(kq, optarg); break; case 'i': init = 1; break; default: return EX_USAGE; @@ -75,12 +78,19 @@ int main(int argc, char *argv[]) { argv += optind; if (!argc) errx(EX_USAGE, "command required"); + char **rest = argv; + if (append) { + rest = calloc(argc + 2, sizeof(*rest)); + if (!rest) err(EX_OSERR, "calloc"); + memcpy(rest, argv, sizeof(*argv) * argc); + } + #ifdef __OpenBSD__ int error = pledge("stdio proc exec", NULL); if (error) err(EX_OSERR, "pledge"); #endif - if (init) run(argv); + if (init) run(rest); for (;;) { struct kevent event; int nevents = kevent(kq, NULL, 0, &event, 1, NULL); @@ -89,6 +99,7 @@ int main(int argc, char *argv[]) { if (event.fflags & NOTE_DELETE) { errx(EX_TEMPFAIL, "%s: file removed", (char *)event.udata); } - run(argv); + if (append) rest[argc] = (char *)event.udata; + run(rest); } } |