summaryrefslogtreecommitdiff
path: root/src/skaembutils
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2015-03-06 19:36:09 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2015-03-06 19:36:09 +0000
commit5d169a719b1614774a86b837b4bc9a7c41fa1110 (patch)
tree298e298f76ed1f2560c8d392b6a26bf7baa75143 /src/skaembutils
parentc8edbcd86c1f4157e3998fb0d81c9a576b0f1f0a (diff)
downloads6-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-pause1
-rw-r--r--src/skaembutils/s6-pause.c43
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 ;
}