diff options
author | Laurent Bercot <ska-skaware@skarnet.org> | 2015-03-06 19:36:09 +0000 |
---|---|---|
committer | Laurent Bercot <ska-skaware@skarnet.org> | 2015-03-06 19:36:09 +0000 |
commit | 5d169a719b1614774a86b837b4bc9a7c41fa1110 (patch) | |
tree | 298e298f76ed1f2560c8d392b6a26bf7baa75143 /src/skaembutils | |
parent | c8edbcd86c1f4157e3998fb0d81c9a576b0f1f0a (diff) | |
download | s6-portable-utils-2.0.4.0.tar.xz |
- Added new options to s6-pausev2.0.4.0
- version: 2.0.4.0
Diffstat (limited to 'src/skaembutils')
-rw-r--r-- | src/skaembutils/deps-exe/s6-pause | 1 | ||||
-rw-r--r-- | src/skaembutils/s6-pause.c | 43 |
2 files changed, 43 insertions, 1 deletions
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 <unistd.h> +#include <signal.h> +#include <skalibs/uint.h> +#include <skalibs/sgetopt.h> +#include <skalibs/strerr2.h> +#include <skalibs/sig.h> -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 ; } |