From 69c1b1b2acc018fe7342106543de2ca19688b225 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Thu, 25 Feb 2021 19:45:56 -0500 Subject: Add catsit-timer utility --- catsit-timer.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 catsit-timer.c (limited to 'catsit-timer.c') diff --git a/catsit-timer.c b/catsit-timer.c new file mode 100644 index 0000000..2869311 --- /dev/null +++ b/catsit-timer.c @@ -0,0 +1,70 @@ +/* Copyright (C) 2021 C. McEnroe + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +static void run(char *argv[]) { + pid_t pid = fork(); + if (pid < 0) err(EX_OSERR, "fork"); + if (!pid) { + execvp(argv[0], argv); + err(126, "%s", argv[0]); + } + + int status; + pid = wait(&status); + if (pid < 0) err(EX_OSERR, "wait"); + if (WIFEXITED(status)) { + status = WEXITSTATUS(status); + if (status) exit(status); + } else { + exit(status); + } +} + +int main(int argc, char *argv[]) { + if (argc < 2) errx(EX_USAGE, "interval required"); + if (argc < 3) errx(EX_USAGE, "command required"); + + unsigned interval = 0; + char *spec = argv[1]; + while (*spec) { + unsigned num = strtoul(spec, &spec, 10); + switch (*spec) { + break; case '\0': interval += num; + break; case 's': spec++; interval += num; + break; case 'm': spec++; interval += 60 * num; + break; case 'h': spec++; interval += 60 * 60 * num; + break; default: errx(EX_USAGE, "invalid interval unit %c", *spec); + } + } + if (!interval) errx(EX_USAGE, "invalid zero interval"); + +#ifdef __OpenBSD__ + int error = pledge("stdio proc exec", NULL); + if (error) err(EX_OSERR, "pledge"); +#endif + + for (;;) { + run(&argv[2]); + sleep(interval); + } +} -- cgit 1.4.1 ibretls/log/compat?h=3.2.0&id=bfce2a30014ef361a15d4b653b3810fcd53d991c&showmsg=1&follow=1'>Expand)Author 2020-09-29import: Add m4/ax_add_fortify_source.m4June McEnroe 2020-08-05build: Add README.7 to EXTRA_DIST 3.2.0June McEnroe 2020-08-03doc: Indicate that only OpenSSL 1.1.1b and newer workJune McEnroe