memchr.3: Deprecate rawmemchr(3)
PATCH 1/1 memchr.3: Deprecate rawmemchr(3)
It is not optimized, and it calls either strlen(3) or memchr(3), so the caller can do it directly, and it will be better.
Suggested-by Wilco Dijkstra <[email protected]>
Signed-off-by Alejandro Colomar <[email protected]>
--- man3/memchr.3 | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-)
man3/memchr.3 +12 -16
@@ -22,7 +22,8 @@ .SH SYNOPSIS .PP .BI "void *memchr(const void " s [. n "], int " c ", size_t " n ); .BI "void *memrchr(const void " s [. n "], int " c ", size_t " n ); -.BI "void *rawmemchr(const void " s [. n "], int " c ); +.PP +.BI "[[deprecated]] void *rawmemchr(const void " s [. n "], int " c ); .fi .PP .RS -4
@@ -66,26 +67,21 @@ .SH DESCRIPTION The .BR rawmemchr () function is similar to -.BR memchr (): -it assumes (i.e., the programmer knows for certain) +.BR memchr (), +but it assumes +(i.e., the programmer knows for certain) that an instance of .I c lies somewhere in the memory area starting at the location pointed to by -.IR s , -and so performs an optimized search for -.I c -(i.e., no use of a count argument to limit the range of the search). +.IR s . If an instance of .I c -is not found, the results are unpredictable. -The following call is a fast means of locating a string's -terminating null byte: -.PP -.in +4n -.EX -char *p = rawmemchr(s,\ \(aq\e0\(aq); -.EE -.in +is not found, the behavior is undefined. +Use either +.BR strlen (3) +or +.BR memchr (3) +instead. .SH RETURN VALUE The .BR memchr ()
Signature · 1 line
2.39.0
Hi Alex,
Quoted 5 lines
It is not optimized, and it calls either strlen(3) or memchr(3), so the caller can do it directly, and it will be better.
Suggested-by Wilco Dijkstra <[email protected]>Signed-off-by Alejandro Colomar <[email protected]>
This looks good to me. Btw in the codesearch there are about 800 uses, the majority looks like prototypes etc, so there are few actual uses. Interestingly GLIBC still contains this:
#ifdef _LIBC
p = __rawmemchr (p, '\0');
#else
p = strchr (p, '\0');#endif
The strchr (p, 0) is optimized by compilers into strlen (since that's obviously the right optimization) so adding rawmemchr was not only wasted effort, but it made things slower as well. So we should remove these uses from GLIBC.
Cheers,
Wilco