From 347f8a8a14e3fb736ea6f42c7a0da1a0472f947f Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Mon, 19 Jan 2015 16:20:29 +0000 Subject: - Added unixconnection - Added sig_name & sig_number (suggestion from Olivier Brunel) - version bumped to 2.2.1.0, rc --- src/libstddjb/sig-internal.h | 15 ++++++++ src/libstddjb/sig_name.c | 11 ++++++ src/libstddjb/sig_number.c | 12 +++++++ src/libstddjb/sig_table.c | 83 ++++++++++++++++++++++++++++++++++++++++++++ src/libstddjb/skasigaction.c | 5 ++- 5 files changed, 123 insertions(+), 3 deletions(-) create mode 100644 src/libstddjb/sig-internal.h create mode 100644 src/libstddjb/sig_name.c create mode 100644 src/libstddjb/sig_number.c create mode 100644 src/libstddjb/sig_table.c (limited to 'src/libstddjb') 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 +#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 +#include +#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 +#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 -#include #include 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 ; -- cgit v1.2.3