mirror of
https://github.com/fluencelabs/musl
synced 2025-06-22 03:02:07 +00:00
implement memrchr (nonstandard) and optimize strrchr in terms of it
This commit is contained in:
@ -74,6 +74,7 @@ int strncasecmp (const char *, const char *, size_t);
|
|||||||
char *strchrnul(const char *, int);
|
char *strchrnul(const char *, int);
|
||||||
char *strcasestr(const char *, const char *);
|
char *strcasestr(const char *, const char *);
|
||||||
char *strsep(char **, const char *);
|
char *strsep(char **, const char *);
|
||||||
|
void *memrchr(const void *, int, size_t);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
12
src/string/memrchr.c
Normal file
12
src/string/memrchr.c
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#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);
|
@ -1,9 +1,8 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
void *__memrchr(const void *, int, size_t);
|
||||||
|
|
||||||
char *strrchr(const char *s, int c)
|
char *strrchr(const char *s, int c)
|
||||||
{
|
{
|
||||||
const char *p;
|
return __memrchr(s, c, strlen(s));
|
||||||
c = (char)c;
|
|
||||||
for (p=s+strlen(s); p>=s && *p!=c; p--);
|
|
||||||
return p>=s ? (char *)p : 0;
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user