char *strchrnul(const char *, int);
char *strcasestr(const char *, const char *);
char *strsep(char **, const char *);
+void *memrchr(const void *, int, size_t);
#endif
#ifdef __cplusplus
--- /dev/null
+#include <string.h>
+#include "libc.h"
+
+void *__memrchr(const void *m, int c, size_t n)
+{
+ const unsigned char *s = m;
+ c = (unsigned char)c;
+ while (n--) if (s[n]==c) return (void *)(s+n);
+ return 0;
+}
+
+weak_alias(__memrchr, memrchr);
#include <string.h>
+void *__memrchr(const void *, int, size_t);
+
char *strrchr(const char *s, int c)
{
- const char *p;
- c = (char)c;
- for (p=s+strlen(s); p>=s && *p!=c; p--);
- return p>=s ? (char *)p : 0;
+ return __memrchr(s, c, strlen(s));
}