Walter,
First, there's no memcopy [sic] in that code.
Second, memcmp returns an int.
Third, even if there was a memcopy [sic] returning a pointer,
you failed to notice the ! aka logical not. Now, the result
of !p (where p is a pointer) will not be a pointer.
http://c-faq.com/null/ptrtest.html and http://c-faq.com/bool/bool2.html
That is, !p will always be either 0 or 1, and. nothing. else.
At least on any C compiler that's even slightly relevant.
walter harms wrote:
Am 27.11.2013 15:21, schrieb Denys Vlasenko:
On Wed, Nov 27, 2013 at 2:46 AM, Rich Felker<[email protected]> wrote:
On Tue, Nov 26, 2013 at 10:01:36PM +0200, Daniel Borca wrote:
+#ifndef HAVE_SIGISEMPTYSET
+int sigisemptyset(sigset_t *set)
+{
+ sigset_t empty;
+ int ret = sigemptyset(&empty);
+ if (ret == 0) {
+ ret = !memcmp(&empty, set, sizeof(sigset_t));
+ }
+ return ret;
+}
+#endif
This is not a suitable fallback implementation. It's not needed on
musl (we provide sigisemptyset), but if this version were used, it
would give the wrong results, because musl's sigemptyset only fills
the first _NSIG-1 bits and ignores the remaining ~900 bits of junk in
sigset_t.
Why does musl use such pointlessly huge sigset_t?
i would expect a warning here. ret is int and memcopy returns (void *).
This makes int=void*.
re,
wh
-dborca
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox