diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2025-11-04 15:44:18 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2025-11-04 15:44:18 +0000 |
| commit | 32ac3aa6ac8f0dc9a240611a3696c0e5510b841d (patch) | |
| tree | e90307b76f90493739ad31506a9890c4c82c22a3 | |
| parent | 81c0e9dc69dcb2a5e498ee53ce47acef06ab4f77 (diff) | |
| download | skalibs-32ac3aa6ac8f0dc9a240611a3696c0e5510b841d.tar.gz | |
Optimize sig_name and sig_number, add stringkey_bcasecmp etc.
| -rw-r--r-- | package/deps.mak | 15 | ||||
| -rw-r--r-- | src/include/skalibs/bytestr.h | 4 | ||||
| -rw-r--r-- | src/libstddjb/sig-internal.h | 15 | ||||
| -rw-r--r-- | src/libstddjb/sig_name.c | 90 | ||||
| -rw-r--r-- | src/libstddjb/sig_number.c | 93 | ||||
| -rw-r--r-- | src/libstddjb/sig_table.c | 86 | ||||
| -rw-r--r-- | src/libstddjb/str_bcasecmp.c | 10 | ||||
| -rw-r--r-- | src/libstddjb/str_casecmp.c | 10 | ||||
| -rw-r--r-- | src/libstddjb/stringkey_bcasecmp.c | 12 | ||||
| -rw-r--r-- | src/libstddjb/stringkey_casecmp.c | 13 |
10 files changed, 232 insertions, 116 deletions
diff --git a/package/deps.mak b/package/deps.mak index abdd639..e35a948 100644 --- a/package/deps.mak +++ b/package/deps.mak @@ -21,7 +21,7 @@ src/include/skalibs/djbtime.h: src/include/skalibs/tai.h src/include/skalibs/uin src/include/skalibs/djbunix.h: src/include/skalibs/devino.h src/include/skalibs/fcntl.h src/include/skalibs/gccattributes.h src/include/skalibs/stralloc.h src/include/skalibs/env.h: src/include/skalibs/gccattributes.h src/include/skalibs/stralloc.h src/include/skalibs/envalloc.h: src/include/skalibs/genalloc.h -src/include/skalibs/envexec.h: src/include/skalibs/env.h src/include/skalibs/exec.h src/include/skalibs/prog.h src/include/skalibs/strerr.h +src/include/skalibs/envexec.h: src/include/skalibs/env.h src/include/skalibs/exec.h src/include/skalibs/gol.h src/include/skalibs/prog.h src/include/skalibs/strerr.h src/include/skalibs/error.h: src/include/skalibs/gccattributes.h src/include/skalibs/exec.h: src/include/skalibs/env.h src/include/skalibs/gccattributes.h src/include/skalibs/posixplz.h src/include/skalibs/fmtscan.h: src/include/skalibs/gccattributes.h @@ -31,6 +31,7 @@ src/include/skalibs/genset.h: src/include/skalibs/functypes.h src/include/skalibs/gensetdyn.h: src/include/skalibs/functypes.h src/include/skalibs/genalloc.h src/include/skalibs/stralloc.h src/include/skalibs/gol.h: src/include/skalibs/uint64.h src/include/skalibs/iopause.h: src/include/skalibs/tai.h +src/include/skalibs/ip46.h: src/include/skalibs/fmtscan.h src/include/skalibs/socket.h src/include/skalibs/tai.h src/include/skalibs/keventbridge.h: src/include/skalibs/sysdeps.h src/include/skalibs/kolbak.h: src/include/skalibs/unixmessage.h src/include/skalibs/lolstdio.h: src/include/skalibs/bufalloc.h src/include/skalibs/buffer.h src/include/skalibs/strerr.h @@ -56,6 +57,9 @@ src/include/skalibs/strerr2.h: src/include/skalibs/strerr.h src/include/skalibs/tai.h: src/include/skalibs/gccattributes.h src/include/skalibs/uint64.h src/include/skalibs/textclient.h: src/include/skalibs/allreadwrite.h src/include/skalibs/tai.h src/include/skalibs/textmessage.h src/include/skalibs/textmessage.h: src/include/skalibs/allreadwrite.h src/include/skalibs/bufalloc.h src/include/skalibs/buffer.h src/include/skalibs/gccattributes.h src/include/skalibs/stralloc.h src/include/skalibs/tai.h +src/include/skalibs/types.h: src/include/skalibs/uint16.h src/include/skalibs/uint32.h src/include/skalibs/uint64.h +src/include/skalibs/uint16.h: src/include/skalibs/uint64.h +src/include/skalibs/uint32.h: src/include/skalibs/uint64.h src/include/skalibs/unix-timed.h: src/include/skalibs/bufalloc.h src/include/skalibs/buffer.h src/include/skalibs/functypes.h src/include/skalibs/stralloc.h src/include/skalibs/tai.h src/include/skalibs/unix-transactional.h: src/include/skalibs/direntry.h src/include/skalibs/gccattributes.h src/include/skalibs/stralloc.h src/include/skalibs/unixconnection.h: src/include/skalibs/unixmessage.h @@ -525,10 +529,9 @@ src/libstddjb/sig_altignore.o src/libstddjb/sig_altignore.lo: src/libstddjb/sig_ src/libstddjb/sig_block.o src/libstddjb/sig_block.lo: src/libstddjb/sig_block.c src/include/skalibs/sig.h src/libstddjb/sig_blocknone.o src/libstddjb/sig_blocknone.lo: src/libstddjb/sig_blocknone.c src/include/skalibs/sig.h src/libstddjb/sig_catch.o src/libstddjb/sig_catch.lo: src/libstddjb/sig_catch.c src/include/skalibs/functypes.h src/include/skalibs/nonposix.h src/include/skalibs/nsig.h src/include/skalibs/sig.h -src/libstddjb/sig_name.o src/libstddjb/sig_name.lo: src/libstddjb/sig_name.c src/libstddjb/sig-internal.h src/include/skalibs/sig.h -src/libstddjb/sig_number.o src/libstddjb/sig_number.lo: src/libstddjb/sig_number.c src/libstddjb/sig-internal.h src/include/skalibs/sig.h +src/libstddjb/sig_name.o src/libstddjb/sig_name.lo: src/libstddjb/sig_name.c src/include/skalibs/nonposix.h src/include/skalibs/nsig.h +src/libstddjb/sig_number.o src/libstddjb/sig_number.lo: src/libstddjb/sig_number.c src/include/skalibs/bytestr.h src/include/skalibs/sig.h src/libstddjb/sig_restoreto.o src/libstddjb/sig_restoreto.lo: src/libstddjb/sig_restoreto.c src/include/skalibs/sig.h -src/libstddjb/sig_table.o src/libstddjb/sig_table.lo: src/libstddjb/sig_table.c src/include/skalibs/nonposix.h src/libstddjb/sig-internal.h src/libstddjb/sig_unblock.o src/libstddjb/sig_unblock.lo: src/libstddjb/sig_unblock.c src/include/skalibs/sig.h src/libstddjb/sigfpe.o src/libstddjb/sigfpe.lo: src/libstddjb/sigfpe.c src/include/skalibs/segfault.h src/libstddjb/sigsegv.o src/libstddjb/sigsegv.lo: src/libstddjb/sigsegv.c src/include/skalibs/segfault.h @@ -591,7 +594,9 @@ src/libstddjb/socket_udp6.o src/libstddjb/socket_udp6.lo: src/libstddjb/socket_u src/libstddjb/socket_waitconn.o src/libstddjb/socket_waitconn.lo: src/libstddjb/socket_waitconn.c src/include/skalibs/allreadwrite.h src/include/skalibs/iopause.h src/include/skalibs/socket.h src/libstddjb/socketpair_internal.o src/libstddjb/socketpair_internal.lo: src/libstddjb/socketpair_internal.c src/include/skalibs/djbunix.h src/include/skalibs/fcntl.h src/include/skalibs/nonposix.h src/include/skalibs/socket.h src/include/skalibs/sysdeps.h src/libstddjb/stamp.o src/libstddjb/stamp.lo: src/libstddjb/stamp.c src/include/skalibs/tai.h +src/libstddjb/str_bcasecmp.o src/libstddjb/str_bcasecmp.lo: src/libstddjb/str_bcasecmp.c src/include/skalibs/bytestr.h src/libstddjb/str_bcmp.o src/libstddjb/str_bcmp.lo: src/libstddjb/str_bcmp.c src/include/skalibs/bytestr.h +src/libstddjb/str_casecmp.o src/libstddjb/str_casecmp.lo: src/libstddjb/str_casecmp.c src/include/skalibs/bytestr.h src/libstddjb/str_chr.o src/libstddjb/str_chr.lo: src/libstddjb/str_chr.c src/include/skalibs/bytestr.h src/libstddjb/str_cmp.o src/libstddjb/str_cmp.lo: src/libstddjb/str_cmp.c src/include/skalibs/bytestr.h src/libstddjb/str_fmt.o src/libstddjb/str_fmt.lo: src/libstddjb/str_fmt.c src/include/skalibs/fmtscan.h @@ -616,7 +621,9 @@ src/libstddjb/string_quote_nodelim_mustquote.o src/libstddjb/string_quote_nodeli src/libstddjb/string_unquote.o src/libstddjb/string_unquote.lo: src/libstddjb/string_unquote.c src/include/skalibs/skamisc.h src/libstddjb/string_unquote_nodelim.o src/libstddjb/string_unquote_nodelim.lo: src/libstddjb/string_unquote_nodelim.c src/include/skalibs/skamisc.h src/libstddjb/string_unquote_withdelim.o src/libstddjb/string_unquote_withdelim.lo: src/libstddjb/string_unquote_withdelim.c src/include/skalibs/bytestr.h src/include/skalibs/fmtscan.h src/include/skalibs/posixishard.h src/include/skalibs/skamisc.h +src/libstddjb/stringkey_bcasecmp.o src/libstddjb/stringkey_bcasecmp.lo: src/libstddjb/stringkey_bcasecmp.c src/libstddjb/bytestr-internal.h src/include/skalibs/bytestr.h src/libstddjb/stringkey_bcmp.o src/libstddjb/stringkey_bcmp.lo: src/libstddjb/stringkey_bcmp.c src/libstddjb/bytestr-internal.h src/include/skalibs/bytestr.h +src/libstddjb/stringkey_casecmp.o src/libstddjb/stringkey_casecmp.lo: src/libstddjb/stringkey_casecmp.c src/libstddjb/bytestr-internal.h src/include/skalibs/bytestr.h src/libstddjb/stringkey_cmp.o src/libstddjb/stringkey_cmp.lo: src/libstddjb/stringkey_cmp.c src/libstddjb/bytestr-internal.h src/include/skalibs/bytestr.h src/libstddjb/strn_fmt.o src/libstddjb/strn_fmt.lo: src/libstddjb/strn_fmt.c src/include/skalibs/fmtscan.h src/include/skalibs/types.h src/libstddjb/subgetopt.o src/libstddjb/subgetopt.lo: src/libstddjb/subgetopt.c src/include/skalibs/sgetopt.h diff --git a/src/include/skalibs/bytestr.h b/src/include/skalibs/bytestr.h index c99a94b..756b9df 100644 --- a/src/include/skalibs/bytestr.h +++ b/src/include/skalibs/bytestr.h @@ -52,7 +52,11 @@ extern int case_startb (char const *, size_t, char const *) gccattr_pure ; extern int str_cmp (void const *, void const *) gccattr_pure ; extern int str_bcmp (void const *, void const *) gccattr_pure ; +extern int str_casecmp (void const *, void const *) gccattr_pure ; +extern int str_bcasecmp (void const *, void const *) gccattr_pure ; extern int stringkey_cmp (void const *, void const *) gccattr_pure ; extern int stringkey_bcmp (void const *, void const *) gccattr_pure ; +extern int stringkey_casecmp (void const *, void const *) gccattr_pure ; +extern int stringkey_bcasecmp (void const *, void const *) gccattr_pure ; #endif diff --git a/src/libstddjb/sig-internal.h b/src/libstddjb/sig-internal.h deleted file mode 100644 index 573fbfa..0000000 --- a/src/libstddjb/sig-internal.h +++ /dev/null @@ -1,15 +0,0 @@ -/* ISC license. */ - -#ifndef SKALIBS_SIG_INTERNAL_H -#define SKALIBS_SIG_INTERNAL_H - -typedef struct sigtable_s sigtable, *sigtable_ref ; -struct sigtable_s -{ - int number ; - char const *name ; -} ; - -extern sigtable const skalibs_sigtable[] ; - -#endif diff --git a/src/libstddjb/sig_name.c b/src/libstddjb/sig_name.c index c8d7b6f..36b6ac0 100644 --- a/src/libstddjb/sig_name.c +++ b/src/libstddjb/sig_name.c @@ -1,11 +1,89 @@ -/* ISC license. */ + /* ISC license. */ -#include <skalibs/sig.h> -#include "sig-internal.h" +#include <skalibs/nonposix.h> + +#include <signal.h> +#include <skalibs/nsig.h> + +static char const *const table[SKALIBS_NSIG] = +{ + [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 +} ; char const *sig_name (int sig) { - sigtable const *p = skalibs_sigtable ; - for (; p->number ; p++) if (sig == p->number) break ; - return p->number ? p->name : "???" ; + return sig <= 0 || sig > SKALIBS_NSIG || !table[sig] ? "???" : table[sig] ; } diff --git a/src/libstddjb/sig_number.c b/src/libstddjb/sig_number.c index d234185..ed5bf44 100644 --- a/src/libstddjb/sig_number.c +++ b/src/libstddjb/sig_number.c @@ -1,13 +1,96 @@ /* ISC license. */ -#include <strings.h> +#include <stdlib.h> +#include <skalibs/bytestr.h> #include <skalibs/sig.h> -#include "sig-internal.h" + +struct sigtable_s +{ + char const *name ; + int number ; +} ; + +static struct sigtable_s const table[] = +{ + { "ABRT", SIGABRT }, + { "ALRM", SIGALRM }, + { "BUS", SIGBUS }, + { "CHLD", SIGCHLD }, +#ifdef SIGCLD + { "CLD", SIGCLD }, +#endif + { "CONT", SIGCONT }, +#ifdef SIGEMT + { "EMT", SIGEMT }, +#endif + { "FPE", SIGFPE }, + { "HUP", SIGHUP }, + { "ILL", SIGILL }, +#ifdef SIGINFO + { "INFO", SIGINFO }, +#endif + { "INT", SIGINT }, +#ifdef SIGIO + { "IO", SIGIO }, +#endif +#ifdef SIGIOT + { "IOT", SIGIOT }, +#endif + { "KILL", SIGKILL }, +#ifdef SIGLOST + { "LOST", SIGLOST }, +#endif + { "PIPE", SIGPIPE }, +#ifdef SIGPOLL + { "POLL", SIGPOLL }, +#endif +#ifdef SIGPROF + { "PROF", SIGPROF }, +#endif +#ifdef SIGPWR + { "PWR", SIGPWR }, +#endif + { "QUIT", SIGQUIT }, + { "SEGV", SIGSEGV }, +#ifdef SIGSTKFLT + { "STKFLT", SIGSTKFLT }, +#endif + { "STOP", SIGSTOP }, +#ifdef SIGSYS + { "SYS", SIGSYS }, +#endif + { "TERM", SIGTERM }, +#ifdef SIGTRAP + { "TRAP", SIGTRAP }, +#endif + { "TSTP", SIGTSTP }, + { "TTIN", SIGTTIN }, + { "TTOU", SIGTTOU }, +#ifdef SIGUNUSED + { "UNUSED", SIGUNUSED }, +#endif +#ifdef SIGURG + { "URG", SIGURG }, +#endif + { "USR1", SIGUSR1 }, + { "USR2", SIGUSR2 }, +#ifdef SIGVTALRM + { "VTALRM", SIGVTALRM }, +#endif +#ifdef SIGWINCH + { "WINCH", SIGWINCH }, +#endif +#ifdef SIGXCPU + { "XCPU", SIGXCPU }, +#endif +#ifdef SIGXFSZ + { "XFSZ", SIGXFSZ }, +#endif +} ; int sig_number (char const *name) { - sigtable const *p = skalibs_sigtable ; - for (; p->name ; p++) if (!strcasecmp(name, p->name)) break ; - return p->number ; + struct sigtable_s *p = bsearch(name, table, sizeof(table)/sizeof(struct sigtable_s), sizeof(struct sigtable_s), &stringkey_bcasecmp) ; + return p ? p->number : 0 ; } diff --git a/src/libstddjb/sig_table.c b/src/libstddjb/sig_table.c deleted file mode 100644 index 9d3bad8..0000000 --- a/src/libstddjb/sig_table.c +++ /dev/null @@ -1,86 +0,0 @@ - /* ISC license. */ - -#include <skalibs/nonposix.h> - -#include <signal.h> - -#include "sig-internal.h" - -sigtable 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/str_bcasecmp.c b/src/libstddjb/str_bcasecmp.c new file mode 100644 index 0000000..809bf7b --- /dev/null +++ b/src/libstddjb/str_bcasecmp.c @@ -0,0 +1,10 @@ +/* ISC license. */ + +#include <strings.h> + +#include <skalibs/bytestr.h> + +int str_bcasecmp (void const *a, void const *b) +{ + return strcasecmp((char const *)a, *(char const *const *)b) ; +} diff --git a/src/libstddjb/str_casecmp.c b/src/libstddjb/str_casecmp.c new file mode 100644 index 0000000..fead2bf --- /dev/null +++ b/src/libstddjb/str_casecmp.c @@ -0,0 +1,10 @@ +/* ISC license. */ + +#include <strings.h> + +#include <skalibs/bytestr.h> + +int str_casecmp (void const *a, void const *b) +{ + return strcasecmp(*(char const *const *)a, *(char const *const *)b) ; +} diff --git a/src/libstddjb/stringkey_bcasecmp.c b/src/libstddjb/stringkey_bcasecmp.c new file mode 100644 index 0000000..1171f0d --- /dev/null +++ b/src/libstddjb/stringkey_bcasecmp.c @@ -0,0 +1,12 @@ +/* ISC license. */ + +#include <strings.h> + +#include <skalibs/bytestr.h> +#include "bytestr-internal.h" + +int stringkey_bcasecmp (void const *a, void const *b) +{ + struct stringkey_s const *bb = b ; + return strcasecmp((char const *)a, bb->s) ; +} diff --git a/src/libstddjb/stringkey_casecmp.c b/src/libstddjb/stringkey_casecmp.c new file mode 100644 index 0000000..355c0d1 --- /dev/null +++ b/src/libstddjb/stringkey_casecmp.c @@ -0,0 +1,13 @@ +/* ISC license. */ + +#include <strings.h> + +#include <skalibs/bytestr.h> +#include "bytestr-internal.h" + +int stringkey_casecmp (void const *a, void const *b) +{ + struct stringkey_s const *aa = a ; + struct stringkey_s const *bb = b ; + return strcasecmp(aa->s, bb->s) ; +} |
