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@xxxxxxxxxxxxxx> 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/>
Attachment:
OpenPGP_signature
Description: OpenPGP digital signature