Index: b/usr/src/head/string.h =================================================================== --- a/usr/src/head/string.h +++ b/usr/src/head/string.h @@ -140,6 +140,7 @@ extern char *strdup(const char *); #if defined(__EXTENSIONS__) || defined(_GNU_SOURCE) #define __mempcpy mempcpy extern void *mempcpy(void *, const void *, size_t); +extern void *memrchr(const void *, int, size_t); #endif #if defined(__EXTENSIONS__) || \ Index: b/usr/src/lib/libc/amd64/Makefile =================================================================== --- a/usr/src/lib/libc/amd64/Makefile +++ b/usr/src/lib/libc/amd64/Makefile @@ -460,6 +460,7 @@ PORTGEN= \ memalign.o \ memmem.o \ mempcpy.o \ + memrchr.o \ mkdev.o \ mkdtemp.o \ mkfifo.o \ Index: b/usr/src/lib/libc/i386/Makefile.com =================================================================== --- a/usr/src/lib/libc/i386/Makefile.com +++ b/usr/src/lib/libc/i386/Makefile.com @@ -493,6 +493,7 @@ PORTGEN= \ memalign.o \ memmem.o \ mempcpy.o \ + memrchr.o \ mkdev.o \ mkdtemp.o \ mkfifo.o \ Index: b/usr/src/lib/libc/port/mapfile-vers =================================================================== --- a/usr/src/lib/libc/port/mapfile-vers +++ b/usr/src/lib/libc/port/mapfile-vers @@ -276,6 +276,7 @@ SYMBOL_VERSION DYSON_1 { error_print_progname; flock; mempcpy; + memrchr; program_invocation_name; program_invocation_short_name; } ILLUMOS_0.3; Index: b/usr/src/lib/libc/port/gen/memrchr.c =================================================================== --- /dev/null +++ b/usr/src/lib/libc/port/gen/memrchr.c @@ -0,0 +1,18 @@ +#include + +void *memrchr(const void *s, int c, size_t n) +{ + const unsigned char *p; + unsigned char cc; + + if (n) { + cc = (unsigned char) c; + p = (unsigned char *)s + n; + + while (n--) { + if (*(--p) == cc) + return (void *)p; + } + } + return NULL; +}