[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