All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 1/2] string: implement strchrnul
@ 2021-06-28  5:19 Ahmad Fatoum
  2021-06-28  5:19 ` [PATCH v2 2/2] console: respect baudrate specified in device-tree stdout-path Ahmad Fatoum
  2021-06-28 12:50 ` [PATCH v2 1/2] string: implement strchrnul Sascha Hauer
  0 siblings, 2 replies; 3+ messages in thread
From: Ahmad Fatoum @ 2021-06-28  5:19 UTC (permalink / raw)
  To: barebox; +Cc: Ahmad Fatoum

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 common single pass implementation.

Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
v1 -> v2:
  no change
---
 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 f962159597df..1a1265bdd689 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -2497,10 +2497,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.30.2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-06-28 12:52 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-06-28  5:19 [PATCH v2 1/2] string: implement strchrnul Ahmad Fatoum
2021-06-28  5:19 ` [PATCH v2 2/2] console: respect baudrate specified in device-tree stdout-path Ahmad Fatoum
2021-06-28 12:50 ` [PATCH v2 1/2] string: implement strchrnul Sascha Hauer

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.