From 941bd884cc0221d051840ce6d21650339e711863 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Tue, 1 May 2018 16:56:02 -0400 Subject: [PATCH] optimize sigisemptyset the static const zero set ended up getting put in bss instead of rodata, wasting writable memory, and the call to memcmp was size-inefficient. generally for nonstandard extension functions we try to avoid poking at any internals directly, but the way the zero set was setup was arguably already doing so. --- src/signal/sigisemptyset.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/signal/sigisemptyset.c b/src/signal/sigisemptyset.c index 312c66cf..68b86624 100644 --- a/src/signal/sigisemptyset.c +++ b/src/signal/sigisemptyset.c @@ -4,6 +4,7 @@ int sigisemptyset(const sigset_t *set) { - static const unsigned long zeroset[_NSIG/8/sizeof(long)]; - return !memcmp(set, &zeroset, _NSIG/8); + for (size_t i=0; i<_NSIG/8/sizeof *set->__bits; i++) + if (set->__bits[i]) return 0; + return 1; } -- 2.25.1