[PATCH 3/3] platform: fix missing sigisemptyset

Daniel Borca dborca at yahoo.com
Wed Nov 27 15:57:07 UTC 2013


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<dalias at aerifal.cx>  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


More information about the busybox mailing list