lib: add glibc style strchrnul() variant
authorGrant Likely <grant.likely@linaro.org>
Fri, 14 Mar 2014 17:00:14 +0000 (17:00 +0000)
committerGrant Likely <grant.likely@linaro.org>
Fri, 23 May 2014 02:23:27 +0000 (11:23 +0900)
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>
include/linux/string.h
lib/string.c

index ac889c5ea11bd68a846b7c84bb788115ba9b2cec..d36977e029af065a7b104c381891db710050850b 100644 (file)
@@ -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
index 9b1f9062a202fc243bef05853e5b965e91f96182..e0c20eb362f0f1d3cbee7e5989dfa5e9c3466a99 100644 (file)
@@ -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