summaryrefslogtreecommitdiff
path: root/src/libstddjb
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstddjb')
-rw-r--r--src/libstddjb/sig-internal.h15
-rw-r--r--src/libstddjb/sig_name.c11
-rw-r--r--src/libstddjb/sig_number.c12
-rw-r--r--src/libstddjb/sig_table.c83
-rw-r--r--src/libstddjb/skasigaction.c5
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 ;