lib: add glibc style strchrnul() variant
The strchrnul() variant helpfully returns a the end of the string instead of a NULL if the requested character is not found. This can simplify string parsing code since it doesn't need to expicitly check for a NULL return. If a valid string pointer is passed in, then a valid null terminated string will always come back out. Signed-off-by: Grant Likely <grant.likely@linaro.org>
This commit is contained in:
parent
b44aa25d20
commit
11d200e95f
2 changed files with 21 additions and 0 deletions
|
@ -52,6 +52,9 @@ extern int strncasecmp(const char *s1, const char *s2, size_t n);
|
|||
#ifndef __HAVE_ARCH_STRCHR
|
||||
extern char * strchr(const char *,int);
|
||||
#endif
|
||||
#ifndef __HAVE_ARCH_STRCHRNUL
|
||||
extern char * strchrnul(const char *,int);
|
||||
#endif
|
||||
#ifndef __HAVE_ARCH_STRNCHR
|
||||
extern char * strnchr(const char *, size_t, int);
|
||||
#endif
|
||||
|
|
18
lib/string.c
18
lib/string.c
|
@ -301,6 +301,24 @@ char *strchr(const char *s, int c)
|
|||
EXPORT_SYMBOL(strchr);
|
||||
#endif
|
||||
|
||||
#ifndef __HAVE_ARCH_STRCHRNUL
|
||||
/**
|
||||
* strchrnul - Find and return a character in a string, or end of string
|
||||
* @s: The string to be searched
|
||||
* @c: The character to search for
|
||||
*
|
||||
* Returns pointer to first occurrence of 'c' in s. If c is not found, then
|
||||
* return a pointer to the null byte at the end of s.
|
||||
*/
|
||||
char *strchrnul(const char *s, int c)
|
||||
{
|
||||
while (*s && *s != (char)c)
|
||||
s++;
|
||||
return (char *)s;
|
||||
}
|
||||
EXPORT_SYMBOL(strchrnul);
|
||||
#endif
|
||||
|
||||
#ifndef __HAVE_ARCH_STRRCHR
|
||||
/**
|
||||
* strrchr - Find the last occurrence of a character in a string
|
||||
|
|
Loading…
Reference in a new issue