From 5d169a719b1614774a86b837b4bc9a7c41fa1110 Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Fri, 6 Mar 2015 19:36:09 +0000 Subject: - Added new options to s6-pause - version: 2.0.4.0 --- src/skaembutils/deps-exe/s6-pause | 1 + src/skaembutils/s6-pause.c | 43 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/skaembutils/deps-exe/s6-pause b/src/skaembutils/deps-exe/s6-pause index e69de29..e7187fe 100644 --- a/src/skaembutils/deps-exe/s6-pause +++ b/src/skaembutils/deps-exe/s6-pause @@ -0,0 +1 @@ +-lskarnet diff --git a/src/skaembutils/s6-pause.c b/src/skaembutils/s6-pause.c index 8eafdce..acb1f41 100644 --- a/src/skaembutils/s6-pause.c +++ b/src/skaembutils/s6-pause.c @@ -1,9 +1,50 @@ /* ISC license. */ #include +#include +#include +#include +#include +#include -int main () +#define USAGE "s6-pause [ -t ] [ -h ] [ -a ] [ -q ] [ -b ] [ -i ] [ -p signal,signal... ]" +#define dieusage() strerr_dieusage(100, USAGE) + +#define MAX 64 + +int main (int argc, char const *const *argv) { + PROG = "s6-pause" ; + unsigned int sigs[MAX] ; + unsigned int nsig = 0 ; + { + subgetopt_t l = SUBGETOPT_ZERO ; + for (;;) + { + register int opt = subgetopt_r(argc, argv, "thaqbip:", &l) ; + if (opt == -1) break ; + switch (opt) + { + case 't' : if (nsig >= MAX) dieusage() ; sigs[nsig++] = SIGTERM ; + case 'h' : if (nsig >= MAX) dieusage() ; sigs[nsig++] = SIGHUP ; + case 'a' : if (nsig >= MAX) dieusage() ; sigs[nsig++] = SIGALRM ; + case 'q' : if (nsig >= MAX) dieusage() ; sigs[nsig++] = SIGQUIT ; + case 'b' : if (nsig >= MAX) dieusage() ; sigs[nsig++] = SIGABRT ; + case 'i' : if (nsig >= MAX) dieusage() ; sigs[nsig++] = SIGINT ; + case 'p' : + { + unsigned int n ; + if (!uint_scanlist(sigs + nsig, MAX - nsig, l.arg, &n)) dieusage() ; + nsig += n ; + break ; + } + default : dieusage() ; + } + } + argc -= l.ind ; argv += l.ind ; + } + + while (nsig--) sig_ignore(sigs[nsig]) ; pause() ; return 0 ; } -- cgit v1.2.3