[manual]: rawmemchr(3) and UB
Alejandro Colomar
alx.manpages@gmail.com
Thu Dec 29 19:50:52 GMT 2022
Hi Cristian,
On 12/29/22 20:45, Cristian Rodríguez wrote:
> On Thu, Dec 29, 2022 at 4:20 PM Alejandro Colomar via Libc-alpha
> <libc-alpha@sourceware.org> wrote:
>>
>> Hi,
>>
>> I was reading rawmemchr(3), and found some funny text:
>>
>> RETURN VALUE
>> The memchr() and memrchr() functions return a pointer to the matching
>> byte or NULL if the character does not occur in the given memory area.
>>
>> The rawmemchr() function returns a pointer to the matching byte, if one
>> is found. If no matching byte is found, the result is unspecified.
>>
>>
>> Of course, if the byte is not found, the result is not unspecified, but rather
>> undefined, and a crash is very likely so maybe there's not even a result. I
>> thought this might be a thinko of the manual page, but the glibc manual seems to
>> have similar text:
>>
>
> The library itself uses this function mostly to find NULL as an
> optimization. This is all before GCC handled all of this so it is
> mostly obsolete.
> gcc replaces null byte searches that use str*chr with s + strlen(s)
> and expands memchr c=null and rawmemchr-like patterns inline.
You mean that GCC does the following?:
inline size_t
strlen(const char *s)
{
return rawmemchr(s, '\0');
}
If so, great, because I am writing a libc replacement, and was implementing
strlen(3) exactly like that, which is why I needed the docs. It may be
something not very useful, but I guess it's still very useful for libc internals.
Cheers,
Alex
--
<http://www.alejandro-colomar.es/>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://sourceware.org/pipermail/libc-alpha/attachments/20221229/dcb8d65e/attachment.sig>
More information about the Libc-alpha
mailing list