[PATCH 1/2] string: implement strchrnul
From: Ahmad Fatoum <hidden>
Date: 2021-06-19 03:28:46
Subsystem:
generic string library, library code, open firmware and flattened device tree, the rest · Maintainers:
Kees Cook, Andrew Morton, Rob Herring, Saravana Kannan, Linus Torvalds
We have at least two places opencoding strchrnul, one of them needlessly iterating twice instead of once over the string. Replace both by calling a single pass implementation. Signed-off-by: Ahmad Fatoum <redacted> --- commands/hwclock.c | 8 -------- drivers/of/base.c | 5 +---- include/linux/string.h | 4 ++++ lib/string.c | 18 ++++++++++++++++++ 4 files changed, 23 insertions(+), 12 deletions(-)
diff --git a/commands/hwclock.c b/commands/hwclock.c
index 1b5c2cd100ca..7a5600c456c9 100644
--- a/commands/hwclock.c
+++ b/commands/hwclock.c@@ -9,14 +9,6 @@ #include <string.h> #include <environment.h> -static char *strchrnul(const char *s, int c) -{ - while (*s != '\0' && *s != c) - s++; - - return (char *)s; -} - static int sscanf_two_digits(char *s, int *res) { char buf[3];
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 6e716fcdcf27..f375fcd67572 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c@@ -2479,10 +2479,7 @@ struct device_node *of_get_stdoutpath(void) if (!name) return 0; - /* This could make use of strchrnul if it were available */ - p = strchr(name, ':'); - if (!p) - p = name + strlen(name); + p = strchrnul(name, ':'); q = xstrndup(name, p - name);
diff --git a/include/linux/string.h b/include/linux/string.h
index 55bc905c0e6b..47a27a391f0b 100644
--- a/include/linux/string.h
+++ b/include/linux/string.h@@ -25,6 +25,10 @@ extern __kernel_size_t strspn(const char *,const char *); (typeof(&(s1)[0]))(_strstr((s1), (s2))); \ }) +#ifndef __HAVE_ARCH_STRCHRNUL +extern char * strchrnul(const char *,int); +#endif + /* * Include machine specific inline routines */
diff --git a/lib/string.c b/lib/string.c
index bad186586fac..9aeb1d883022 100644
--- a/lib/string.c
+++ b/lib/string.c@@ -274,6 +274,24 @@ char * _strchr(const char * s, int c) #endif EXPORT_SYMBOL(_strchr); +#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
--
2.32.0.rc0
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox