diff options
Diffstat (limited to 'src/libstddjb')
-rw-r--r-- | src/libstddjb/sig-internal.h | 15 | ||||
-rw-r--r-- | src/libstddjb/sig_name.c | 11 | ||||
-rw-r--r-- | src/libstddjb/sig_number.c | 12 | ||||
-rw-r--r-- | src/libstddjb/sig_table.c | 83 | ||||
-rw-r--r-- | src/libstddjb/skasigaction.c | 5 |
5 files changed, 123 insertions, 3 deletions
diff --git a/src/libstddjb/sig-internal.h b/src/libstddjb/sig-internal.h new file mode 100644 index 0000000..9b540fa --- /dev/null +++ b/src/libstddjb/sig-internal.h @@ -0,0 +1,15 @@ +/* ISC license. */ + +#ifndef SIG_INTERNAL +#define SIG_INTERNAL + +typedef struct sigtable_s sigtable_t, *sigtable_t_ref ; +struct sigtable_s +{ + int number ; + char const *name ; +} ; + +extern sigtable_t const skalibs_sigtable[] ; + +#endif diff --git a/src/libstddjb/sig_name.c b/src/libstddjb/sig_name.c new file mode 100644 index 0000000..dd5a456 --- /dev/null +++ b/src/libstddjb/sig_name.c @@ -0,0 +1,11 @@ +/* ISC license. */ + +#include <skalibs/sig.h> +#include "sig-internal.h" + +char const *sig_name (int sig) +{ + register sigtable_t const *p = skalibs_sigtable ; + for (; p->number ; p++) if (sig == p->number) break ; + return p->number ? p->name : "???" ; +} diff --git a/src/libstddjb/sig_number.c b/src/libstddjb/sig_number.c new file mode 100644 index 0000000..93d9b59 --- /dev/null +++ b/src/libstddjb/sig_number.c @@ -0,0 +1,12 @@ +/* ISC license. */ + +#include <skalibs/bytestr.h> +#include <skalibs/sig.h> +#include "sig-internal.h" + +int sig_number (char const *name) +{ + register sigtable_t const *p = skalibs_sigtable ; + for (; p->name ; p++) if (!str_diff(name, p->name)) break ; + return p->number ; +} diff --git a/src/libstddjb/sig_table.c b/src/libstddjb/sig_table.c new file mode 100644 index 0000000..d097cb5 --- /dev/null +++ b/src/libstddjb/sig_table.c @@ -0,0 +1,83 @@ + /* ISC license. */ + +#include <signal.h> +#include "sig-internal.h" + +sigtable_t const skalibs_sigtable[] = +{ + { SIGABRT, "ABRT" }, + { SIGALRM, "ALRM" }, + { SIGBUS, "BUS" }, + { SIGCHLD, "CHLD" }, + { SIGCONT, "CONT" }, + { SIGFPE, "FPE" }, + { SIGHUP, "HUP" }, + { SIGILL, "ILL" }, + { SIGINT, "INT" }, + { SIGKILL, "KILL" }, + { SIGPIPE, "PIPE" }, + { SIGQUIT, "QUIT" }, + { SIGSEGV, "SEGV" }, + { SIGSTOP, "STOP" }, + { SIGTERM, "TERM" }, + { SIGTSTP, "TSTP" }, + { SIGTTIN, "TTIN" }, + { SIGTTOU, "TTOU" }, + { SIGUSR1, "USR1" }, + { SIGUSR2, "USR2" }, +#ifdef SIGPOLL + { SIGPOLL, "POLL" }, +#endif +#ifdef SIGPROF + { SIGPROF, "PROF" }, +#endif +#ifdef SIGSYS + { SIGSYS, "SYS" }, +#endif +#ifdef SIGTRAP + { SIGTRAP, "TRAP" }, +#endif +#ifdef SIGURG + { SIGURG, "URG" }, +#endif +#ifdef SIGVTALRM + { SIGVTALRM, "VTALRM" }, +#endif +#ifdef SIGXCPU + { SIGXCPU, "XCPU" }, +#endif +#ifdef SIGXFSZ + { SIGXFSZ, "XFSZ" }, +#endif +#ifdef SIGIOT + { SIGIOT, "IOT" }, +#endif +#ifdef SIGEMT + { SIGEMT, "EMT" }, +#endif +#ifdef SIGSTKFLT + { SIGSTKFLT, "STKFLT" }, +#endif +#ifdef SIGCLD + { SIGCLD, "CLD" }, +#endif +#ifdef SIGWINCH + { SIGWINCH, "WINCH" }, +#endif +#ifdef SIGIO + { SIGIO, "IO" }, +#endif +#ifdef SIGINFO + { SIGINFO, "INFO" }, +#endif +#ifdef SIGLOST + { SIGLOST, "LOST" }, +#endif +#ifdef SIGPWR + { SIGPWR, "PWR" }, +#endif +#ifdef SIGUNUSED + { SIGUNUSED, "UNUSED" }, +#endif + { 0, 0 } +} ; diff --git a/src/libstddjb/skasigaction.c b/src/libstddjb/skasigaction.c index a673fcb..bb55642 100644 --- a/src/libstddjb/skasigaction.c +++ b/src/libstddjb/skasigaction.c @@ -1,7 +1,6 @@ /* ISC license. */ #include <signal.h> -#include <skalibs/sysdeps.h> #include <skalibs/sig.h> int skasigaction (int sig, struct skasigaction const *new, struct skasigaction *old) @@ -10,11 +9,11 @@ int skasigaction (int sig, struct skasigaction const *new, struct skasigaction * if (((new->flags & SKASA_MASKALL) ? sigfillset(&sanew.sa_mask) : sigemptyset(&sanew.sa_mask)) == -1) return -1 ; sanew.sa_handler = new->handler ; sanew.sa_flags = (new->flags & SKASA_NOCLDSTOP) ? SA_NOCLDSTOP : 0 ; - if (sigaction(sig, &sanew, &saold) == -1) return -1 ; + if (sigaction(sig, &sanew, &saold) < 0) return -1 ; if (old) { register int r = sigismember(&saold.sa_mask, (sig == SIGTERM) ? SIGPIPE : SIGTERM) ; - if (r == -1) return -1 ; + if (r < 0) return -1 ; old->flags = 0 ; if (r) old->flags |= SKASA_MASKALL ; if (saold.sa_flags & SA_NOCLDSTOP) old->flags |= SKASA_NOCLDSTOP ; |