* [PATCH 0/8] some string cleanup, and a tweak of the "config" command
@ 2026-07-01 17:15 Rasmus Villemoes
2026-07-01 17:15 ` [PATCH 1/8] sh: clean up asm/string.h Rasmus Villemoes
` (7 more replies)
0 siblings, 8 replies; 21+ messages in thread
From: Rasmus Villemoes @ 2026-07-01 17:15 UTC (permalink / raw)
To: u-boot; +Cc: Tom Rini, Casey Connolly, Rasmus Villemoes
This started by me wanting something like what the last patch
does. That wasn't too hard, except we had no strcasestr(), and also
our regex engine (which I didn't really want to pull into the mix
anyway) doesn't have a flag that requests case-insensitive
matching. So I wanted to add strcasestr(), but then I stumbled on a
bunch of stuff that should be cleaned up in str-land.
The first five patches are logically independent of each other. The
last three do depend on each other, and the last patch also depends on
patch 2.
Rasmus Villemoes (8):
sh: clean up asm/string.h
string: correct prototype of strchrnul()
string: correct documentation for strstr and strnstr
string: remove unused strswab() function
string: remove more pointless __HAVE_ARCH_STR*
string: add strcasestr()
test: string: add test of new strcasestr() function
cmd: config: allow simple filtering of output
arch/sh/include/asm/string.h | 51 --------------------------
cmd/config.c | 25 +++++++++++--
include/linux/string.h | 13 ++-----
lib/string.c | 70 ++++++++++++++++--------------------
test/lib/string.c | 24 +++++++++++--
5 files changed, 76 insertions(+), 107 deletions(-)
--
2.54.0
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH 1/8] sh: clean up asm/string.h
2026-07-01 17:15 [PATCH 0/8] some string cleanup, and a tweak of the "config" command Rasmus Villemoes
@ 2026-07-01 17:15 ` Rasmus Villemoes
2026-07-02 8:29 ` Simon Glass
2026-07-01 17:15 ` [PATCH 2/8] string: correct prototype of strchrnul() Rasmus Villemoes
` (6 subsequent siblings)
7 siblings, 1 reply; 21+ messages in thread
From: Rasmus Villemoes @ 2026-07-01 17:15 UTC (permalink / raw)
To: u-boot; +Cc: Tom Rini, Casey Connolly, Rasmus Villemoes
First, remove the !__KERNEL__ block, since U-Boot is always compiled
with -D__KERNEL__.
Second, remove the mention of the non-existing file
arch/sh/lib/strcasecmp.c and the redundant declaration of strcasecmp()
If sh did have a strcasecmp.c file, presumably the header would have
had to #define __HAVE_ARCH_STRCASECMP.
Third, remove the explicit #undefs of various __HAVE_ARCH_* and
redundant declarations of standard functions, which are anyway
declared in linux/string.h. In the linux source tree, those are all
#defines, and indeed linux does have asm implementations of those functions.
Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
---
arch/sh/include/asm/string.h | 51 ------------------------------------
1 file changed, 51 deletions(-)
diff --git a/arch/sh/include/asm/string.h b/arch/sh/include/asm/string.h
index 999febcb6b7..12a9a8f796c 100644
--- a/arch/sh/include/asm/string.h
+++ b/arch/sh/include/asm/string.h
@@ -8,8 +8,6 @@
* from linux kernel code.
*/
-#ifdef __KERNEL__ /* only set these up for kernel code */
-
#define __HAVE_ARCH_STRCPY
static inline char *strcpy(char *__dest, const char *__src)
{
@@ -81,53 +79,4 @@ static inline int strcmp(const char *__cs, const char *__ct)
return __res;
}
-#undef __HAVE_ARCH_STRNCMP
-extern int strncmp(const char *__cs, const char *__ct, size_t __n);
-
-#undef __HAVE_ARCH_MEMSET
-extern void *memset(void *__s, int __c, size_t __count);
-
-#undef __HAVE_ARCH_MEMCPY
-extern void *memcpy(void *__to, __const__ void *__from, size_t __n);
-
-#undef __HAVE_ARCH_MEMMOVE
-extern void *memmove(void *__dest, __const__ void *__src, size_t __n);
-
-#undef __HAVE_ARCH_MEMCHR
-extern void *memchr(const void *__s, int __c, size_t __n);
-
-#undef __HAVE_ARCH_STRLEN
-extern size_t strlen(const char *);
-
-/* arch/sh/lib/strcasecmp.c */
-extern int strcasecmp(const char *, const char *);
-
-#else /* KERNEL */
-
-/*
- * let user libraries deal with these,
- * IMHO the kernel has no place defining these functions for user apps
- */
-
-#define __HAVE_ARCH_STRCPY 1
-#define __HAVE_ARCH_STRNCPY 1
-#define __HAVE_ARCH_STRCAT 1
-#define __HAVE_ARCH_STRNCAT 1
-#define __HAVE_ARCH_STRCMP 1
-#define __HAVE_ARCH_STRNCMP 1
-#define __HAVE_ARCH_STRNICMP 1
-#define __HAVE_ARCH_STRCHR 1
-#define __HAVE_ARCH_STRRCHR 1
-#define __HAVE_ARCH_STRSTR 1
-#define __HAVE_ARCH_STRLEN 1
-#define __HAVE_ARCH_STRNLEN 1
-#define __HAVE_ARCH_MEMSET 1
-#define __HAVE_ARCH_MEMCPY 1
-#define __HAVE_ARCH_MEMMOVE 1
-#define __HAVE_ARCH_MEMSCAN 1
-#define __HAVE_ARCH_MEMCMP 1
-#define __HAVE_ARCH_MEMCHR 1
-#define __HAVE_ARCH_STRTOK 1
-
-#endif /* KERNEL */
#endif /* __ASM_SH_STRING_H */
--
2.54.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 2/8] string: correct prototype of strchrnul()
2026-07-01 17:15 [PATCH 0/8] some string cleanup, and a tweak of the "config" command Rasmus Villemoes
2026-07-01 17:15 ` [PATCH 1/8] sh: clean up asm/string.h Rasmus Villemoes
@ 2026-07-01 17:15 ` Rasmus Villemoes
2026-07-02 8:30 ` Simon Glass
2026-07-01 17:15 ` [PATCH 3/8] string: correct documentation for strstr and strnstr Rasmus Villemoes
` (5 subsequent siblings)
7 siblings, 1 reply; 21+ messages in thread
From: Rasmus Villemoes @ 2026-07-01 17:15 UTC (permalink / raw)
To: u-boot; +Cc: Tom Rini, Casey Connolly, Rasmus Villemoes
Both glibc's (where this originated as a GNU extension) and the
kernel's versions of strchrnul() return "char *", not "const
char *". That also makes it consistent with the standard strchr()
function.
Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
---
include/linux/string.h | 2 +-
lib/string.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/include/linux/string.h b/include/linux/string.h
index 850356d7c3f..488a459ed99 100644
--- a/include/linux/string.h
+++ b/include/linux/string.h
@@ -63,7 +63,7 @@ extern char * strchr(const char *,int);
* @c: character to search for
* Return: position of @c in @s, or end of @s if not found
*/
-const char *strchrnul(const char *s, int c);
+char *strchrnul(const char *s, int c);
#ifndef __HAVE_ARCH_STRRCHR
extern char * strrchr(const char *,int);
diff --git a/lib/string.c b/lib/string.c
index 37ea8c29561..a76dcd48d20 100644
--- a/lib/string.c
+++ b/lib/string.c
@@ -263,12 +263,12 @@ char * strchr(const char * s, int c)
}
#endif
-const char *strchrnul(const char *s, int c)
+char *strchrnul(const char *s, int c)
{
for (; *s != (char)c; ++s)
if (*s == '\0')
break;
- return s;
+ return (char *)s;
}
#ifndef __HAVE_ARCH_STRRCHR
--
2.54.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 3/8] string: correct documentation for strstr and strnstr
2026-07-01 17:15 [PATCH 0/8] some string cleanup, and a tweak of the "config" command Rasmus Villemoes
2026-07-01 17:15 ` [PATCH 1/8] sh: clean up asm/string.h Rasmus Villemoes
2026-07-01 17:15 ` [PATCH 2/8] string: correct prototype of strchrnul() Rasmus Villemoes
@ 2026-07-01 17:15 ` Rasmus Villemoes
2026-07-02 8:30 ` Simon Glass
2026-07-01 17:15 ` [PATCH 4/8] string: remove unused strswab() function Rasmus Villemoes
` (4 subsequent siblings)
7 siblings, 1 reply; 21+ messages in thread
From: Rasmus Villemoes @ 2026-07-01 17:15 UTC (permalink / raw)
To: u-boot; +Cc: Tom Rini, Casey Connolly, Rasmus Villemoes
The len parameter for strnstr() concerns the maximum size of the
haystack to consider, not the length of the needle being searched for.
strstr() obviously has no len parameter, so remove the copy-pasta.
Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
---
lib/string.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/lib/string.c b/lib/string.c
index a76dcd48d20..45f0f5f8d09 100644
--- a/lib/string.c
+++ b/lib/string.c
@@ -702,7 +702,7 @@ void *memdup(const void *src, size_t len)
*
* @s1: string to be searched
* @s2: string to search for
- * @len: maximum number of characters in s2 to consider
+ * @len: maximum number of characters in s1 to consider
*
* Return: pointer to the first occurrence or NULL
*/
@@ -728,7 +728,6 @@ char *strnstr(const char *s1, const char *s2, size_t len)
*
* @s1: string to be searched
* @s2: string to search for
- * @len: maximum number of characters in s2 to consider
*
* Return: pointer to the first occurrence or NULL
*/
--
2.54.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 4/8] string: remove unused strswab() function
2026-07-01 17:15 [PATCH 0/8] some string cleanup, and a tweak of the "config" command Rasmus Villemoes
` (2 preceding siblings ...)
2026-07-01 17:15 ` [PATCH 3/8] string: correct documentation for strstr and strnstr Rasmus Villemoes
@ 2026-07-01 17:15 ` Rasmus Villemoes
2026-07-02 8:30 ` Simon Glass
2026-07-01 17:15 ` [PATCH 5/8] string: remove more pointless __HAVE_ARCH_STR* Rasmus Villemoes
` (3 subsequent siblings)
7 siblings, 1 reply; 21+ messages in thread
From: Rasmus Villemoes @ 2026-07-01 17:15 UTC (permalink / raw)
To: u-boot; +Cc: Tom Rini, Casey Connolly, Rasmus Villemoes
The last use of this function with rather peculiar semantics[*] vanished
in 2021 with 0a527fda782 ("Fix IDE commands issued, fix endian issues,
fix non MMIO"). It has no tests, and should a need for something
similar ever appear, it is better done with some proper
utf16le/utf16be/utf16 abstractions rather than cluttering code with
'#ifdef __LITTLE_ENDIAN'.
[*] The byte-swapping itself is weird enough. But why is an input string
of odd length ok, while the empty string is not allowed?
Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
---
include/linux/string.h | 4 ----
lib/string.c | 28 ----------------------------
2 files changed, 32 deletions(-)
diff --git a/include/linux/string.h b/include/linux/string.h
index 488a459ed99..5bcbf72a89b 100644
--- a/include/linux/string.h
+++ b/include/linux/string.h
@@ -107,10 +107,6 @@ extern char * strndup(const char *, size_t);
extern const char *strdup_const(const char *s);
extern void kfree_const(const void *x);
-#ifndef __HAVE_ARCH_STRSWAB
-extern char * strswab(const char *);
-#endif
-
#ifndef __HAVE_ARCH_MEMSET
extern void * memset(void *,int,__kernel_size_t);
#endif
diff --git a/lib/string.c b/lib/string.c
index 45f0f5f8d09..82d0b6a9caa 100644
--- a/lib/string.c
+++ b/lib/string.c
@@ -503,34 +503,6 @@ char * strsep(char **s, const char *ct)
}
#endif
-#ifndef __HAVE_ARCH_STRSWAB
-/**
- * strswab - swap adjacent even and odd bytes in %NUL-terminated string
- * s: address of the string
- *
- * returns the address of the swapped string or NULL on error. If
- * string length is odd, last byte is untouched.
- */
-char *strswab(const char *s)
-{
- char *p, *q;
-
- if ((NULL == s) || ('\0' == *s)) {
- return (NULL);
- }
-
- for (p=(char *)s, q=p+1; (*p != '\0') && (*q != '\0'); p+=2, q+=2) {
- char tmp;
-
- tmp = *p;
- *p = *q;
- *q = tmp;
- }
-
- return (char *) s;
-}
-#endif
-
#ifndef __HAVE_ARCH_MEMSET
/**
* memset - Fill a region of memory with the given value
--
2.54.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 5/8] string: remove more pointless __HAVE_ARCH_STR*
2026-07-01 17:15 [PATCH 0/8] some string cleanup, and a tweak of the "config" command Rasmus Villemoes
` (3 preceding siblings ...)
2026-07-01 17:15 ` [PATCH 4/8] string: remove unused strswab() function Rasmus Villemoes
@ 2026-07-01 17:15 ` Rasmus Villemoes
2026-07-02 8:30 ` Simon Glass
2026-07-01 17:15 ` [PATCH 6/8] string: add strcasestr() Rasmus Villemoes
` (2 subsequent siblings)
7 siblings, 1 reply; 21+ messages in thread
From: Rasmus Villemoes @ 2026-07-01 17:15 UTC (permalink / raw)
To: u-boot; +Cc: Tom Rini, Casey Connolly, Rasmus Villemoes
None of these six macros are defined by any architecture. Moreover,
the ifndef guard only exists in either string.h or string.c, making them
completely pointless.
I'm not sure whether we have an explicit coding style discouraging the
"extern" qualifier on function declarations, and string.h has a random
mix of everything, but I can't leave it on strncasecmp() now that it
will be immediately after strcasecmp() which doesn't have it.
Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
---
include/linux/string.h | 6 +-----
lib/string.c | 8 --------
2 files changed, 1 insertion(+), 13 deletions(-)
diff --git a/include/linux/string.h b/include/linux/string.h
index 5bcbf72a89b..5e4594b19df 100644
--- a/include/linux/string.h
+++ b/include/linux/string.h
@@ -43,12 +43,8 @@ extern int strcmp(const char *,const char *);
#ifndef __HAVE_ARCH_STRNCMP
extern int strncmp(const char *,const char *,__kernel_size_t);
#endif
-#ifndef __HAVE_ARCH_STRCASECMP
int strcasecmp(const char *s1, const char *s2);
-#endif
-#ifndef __HAVE_ARCH_STRNCASECMP
-extern int strncasecmp(const char *s1, const char *s2, __kernel_size_t len);
-#endif
+int strncasecmp(const char *s1, const char *s2, __kernel_size_t len);
#ifndef __HAVE_ARCH_STRCHR
extern char * strchr(const char *,int);
#endif
diff --git a/lib/string.c b/lib/string.c
index 82d0b6a9caa..20c934c18c3 100644
--- a/lib/string.c
+++ b/lib/string.c
@@ -399,7 +399,6 @@ void kfree_const(const void *x)
}
-#ifndef __HAVE_ARCH_STRSPN
/**
* strspn - Calculate the length of the initial substring of @s which only
* contain letters in @accept
@@ -424,9 +423,7 @@ size_t strspn(const char *s, const char *accept)
return count;
}
-#endif
-#ifndef __HAVE_ARCH_STRPBRK
/**
* strpbrk - Find the first occurrence of a set of characters
* @cs: The string to be searched
@@ -444,9 +441,7 @@ char * strpbrk(const char * cs,const char * ct)
}
return NULL;
}
-#endif
-#ifndef __HAVE_ARCH_STRTOK
/**
* strtok - Split a string into tokens
* @s: The string to be searched
@@ -473,9 +468,7 @@ char * strtok(char * s,const char * ct)
___strtok = send;
return (sbegin);
}
-#endif
-#ifndef __HAVE_ARCH_STRSEP
/**
* strsep - Split a string into tokens
* @s: The string to be searched
@@ -501,7 +494,6 @@ char * strsep(char **s, const char *ct)
return sbegin;
}
-#endif
#ifndef __HAVE_ARCH_MEMSET
/**
--
2.54.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6/8] string: add strcasestr()
2026-07-01 17:15 [PATCH 0/8] some string cleanup, and a tweak of the "config" command Rasmus Villemoes
` (4 preceding siblings ...)
2026-07-01 17:15 ` [PATCH 5/8] string: remove more pointless __HAVE_ARCH_STR* Rasmus Villemoes
@ 2026-07-01 17:15 ` Rasmus Villemoes
2026-07-02 8:30 ` Simon Glass
2026-07-01 17:15 ` [PATCH 7/8] test: string: add test of new strcasestr() function Rasmus Villemoes
2026-07-01 17:15 ` [PATCH 8/8] cmd: config: allow simple filtering of output Rasmus Villemoes
7 siblings, 1 reply; 21+ messages in thread
From: Rasmus Villemoes @ 2026-07-01 17:15 UTC (permalink / raw)
To: u-boot; +Cc: Tom Rini, Casey Connolly, Rasmus Villemoes
While this is not likely needed by any "real" driver code, a later
convenience addition to the "config" command will need this. As usual,
the linker will throw it away if nothing actually uses it, so it
should have no size impact when not used.
Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
---
include/linux/string.h | 1 +
lib/string.c | 27 +++++++++++++++++++++++++++
2 files changed, 28 insertions(+)
diff --git a/include/linux/string.h b/include/linux/string.h
index 5e4594b19df..93aa4cada66 100644
--- a/include/linux/string.h
+++ b/include/linux/string.h
@@ -77,6 +77,7 @@ extern __kernel_size_t strlen(const char *);
#ifndef __HAVE_ARCH_STRNLEN
extern __kernel_size_t strnlen(const char *,__kernel_size_t);
#endif
+char *strcasestr(const char *, const char *);
#ifndef __HAVE_ARCH_STRCSPN
/**
diff --git a/lib/string.c b/lib/string.c
index 20c934c18c3..dbf2ce340df 100644
--- a/lib/string.c
+++ b/lib/string.c
@@ -701,6 +701,33 @@ char *strstr(const char *s1, const char *s2)
}
#endif
+/**
+ * strcasestr() - Case insensitive substring search
+ *
+ * @haystack: string to be searched
+ * @needle: string to search for
+ *
+ * Return: pointer to the first occurrence or NULL
+ *
+ * The case of both strings are ignored.
+ */
+char *strcasestr(const char *haystack, const char *needle)
+{
+ size_t l1, l2;
+
+ l1 = strlen(haystack);
+ l2 = strlen(needle);
+
+ while (l1 >= l2) {
+ if (!strncasecmp(haystack, needle, l2))
+ return (char *)haystack;
+ haystack++;
+ l1--;
+ }
+
+ return NULL;
+}
+
#ifndef __HAVE_ARCH_MEMCHR
/**
* memchr - Find a character in an area of memory.
--
2.54.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 7/8] test: string: add test of new strcasestr() function
2026-07-01 17:15 [PATCH 0/8] some string cleanup, and a tweak of the "config" command Rasmus Villemoes
` (5 preceding siblings ...)
2026-07-01 17:15 ` [PATCH 6/8] string: add strcasestr() Rasmus Villemoes
@ 2026-07-01 17:15 ` Rasmus Villemoes
2026-07-02 8:30 ` Simon Glass
2026-07-01 17:15 ` [PATCH 8/8] cmd: config: allow simple filtering of output Rasmus Villemoes
7 siblings, 1 reply; 21+ messages in thread
From: Rasmus Villemoes @ 2026-07-01 17:15 UTC (permalink / raw)
To: u-boot; +Cc: Tom Rini, Casey Connolly, Rasmus Villemoes
Change the existing strstr() test a little so that the substring not
found is "bits", i.e. one that is actually found when doing case
insensitive search.
Then copy all of lib_strstr(), adapt the expectation for the
strcasestr(s1, s3) result, and add another "not found" case.
Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
---
test/lib/string.c | 24 +++++++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)
diff --git a/test/lib/string.c b/test/lib/string.c
index db6f28dbfdf..d418a40c4d4 100644
--- a/test/lib/string.c
+++ b/test/lib/string.c
@@ -284,18 +284,36 @@ static int lib_strstr(struct unit_test_state *uts)
{
const char *s1 = "Itsy Bitsy Teenie Weenie";
const char *s2 = "eenie";
- const char *s3 = "easy";
+ const char *s3 = "bits";
ut_asserteq_ptr(&s1[12], strstr(s1, s2));
ut_asserteq_ptr(&s1[13], strstr(&s1[3], &s2[1]));
ut_assertnull(strstr(s1, s3));
- ut_asserteq_ptr(&s1[2], strstr(s1, &s3[2]));
- ut_asserteq_ptr(&s1[8], strstr(&s1[5], &s3[2]));
+ ut_asserteq_ptr(&s1[1], strstr(s1, &s3[2]));
+ ut_asserteq_ptr(&s1[7], strstr(&s1[5], &s3[2]));
return 0;
}
LIB_TEST(lib_strstr, 0);
+/** lib_strcasestr() - unit test for strcasestr() */
+static int lib_strcasestr(struct unit_test_state *uts)
+{
+ const char *s1 = "Itsy Bitsy Teenie Weenie";
+ const char *s2 = "eenie";
+ const char *s3 = "bits";
+
+ ut_asserteq_ptr(&s1[12], strcasestr(s1, s2));
+ ut_asserteq_ptr(&s1[13], strcasestr(&s1[3], &s2[1]));
+ ut_asserteq_ptr(&s1[5], strcasestr(s1, s3));
+ ut_asserteq_ptr(&s1[1], strcasestr(s1, &s3[2]));
+ ut_asserteq_ptr(&s1[7], strcasestr(&s1[5], &s3[2]));
+ ut_assertnull(strcasestr(&s1[6], s3));
+
+ return 0;
+}
+LIB_TEST(lib_strcasestr, 0);
+
static int lib_strim(struct unit_test_state *uts)
{
char buf[BUFLEN], *p;
--
2.54.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 8/8] cmd: config: allow simple filtering of output
2026-07-01 17:15 [PATCH 0/8] some string cleanup, and a tweak of the "config" command Rasmus Villemoes
` (6 preceding siblings ...)
2026-07-01 17:15 ` [PATCH 7/8] test: string: add test of new strcasestr() function Rasmus Villemoes
@ 2026-07-01 17:15 ` Rasmus Villemoes
2026-07-01 18:15 ` Tom Rini
2026-07-02 8:30 ` Simon Glass
7 siblings, 2 replies; 21+ messages in thread
From: Rasmus Villemoes @ 2026-07-01 17:15 UTC (permalink / raw)
To: u-boot; +Cc: Tom Rini, Casey Connolly, Rasmus Villemoes
When doing development, it can be quite useful to enable
CONFIG_CMD_CONFIG, so that one can always check whether a config knob
one has just enabled has actually made it to target.
Because sometimes, one doesn't flash the right binary, or maybe one
has just done CONFIG_FOO=y in some config fragment, but that had no
effect because one would also have to do CONFIG_BAR=y.
However, 2400+ lines of text are rather hard to read through. One
probably uses a terminal emulator with capturing enabled, but
searching back through the capture file is a little tedious, and one
easily ends up finding something that doesn't pertain to the most
recent 'config' command invocation.
So make it possible to limit the output to those lines containing a
given string. Like the search functionality in menuconfig, make it
case insensitive, because it is much more convenient to type "config
pinctrl" than "config PINCTRL".
Since enabling CONFIG_CMD_CONFIG by itself adds over 10K of data, and
that increases with every U-Boot release even if one doesn't add any
new features to one's own defconfig (because the .config grows lots of
"is not set"), I don't see any point in guarding this by some
CONFIG_CMD_CONFIG_GREP.
Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
---
cmd/config.c | 25 ++++++++++++++++++++++---
1 file changed, 22 insertions(+), 3 deletions(-)
diff --git a/cmd/config.c b/cmd/config.c
index f0d2033c61f..3a6da55b0ef 100644
--- a/cmd/config.c
+++ b/cmd/config.c
@@ -29,7 +29,23 @@ static int do_config(struct cmd_tbl *cmdtp, int flag, int argc,
}
dst[data_size] = 0;
- puts(dst);
+ if (argc > 1) {
+ const char *s = argv[1];
+ char *b = dst, *e = dst + data_size, *n;
+
+ while (b < e) {
+ n = strchrnul(b, '\n');
+ *n = '\0';
+
+ if (strcasestr(b, s)) {
+ puts(b);
+ puts("\n");
+ }
+ b = n + 1;
+ }
+ } else {
+ puts(dst);
+ }
free:
free(dst);
@@ -38,7 +54,10 @@ free:
}
U_BOOT_CMD(
- config, 1, 1, do_config,
+ config, 2, 1, do_config,
"print .config",
- ""
+ "[str]\n"
+ "\n"
+ "When the optional argument is given, only lines containing\n"
+ "that string are printed. Matching is case-insensitive."
);
--
2.54.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH 8/8] cmd: config: allow simple filtering of output
2026-07-01 17:15 ` [PATCH 8/8] cmd: config: allow simple filtering of output Rasmus Villemoes
@ 2026-07-01 18:15 ` Tom Rini
2026-07-02 8:30 ` Simon Glass
1 sibling, 0 replies; 21+ messages in thread
From: Tom Rini @ 2026-07-01 18:15 UTC (permalink / raw)
To: Rasmus Villemoes; +Cc: u-boot, Casey Connolly
[-- Attachment #1: Type: text/plain, Size: 1773 bytes --]
On Wed, Jul 01, 2026 at 07:15:35PM +0200, Rasmus Villemoes wrote:
> When doing development, it can be quite useful to enable
> CONFIG_CMD_CONFIG, so that one can always check whether a config knob
> one has just enabled has actually made it to target.
>
> Because sometimes, one doesn't flash the right binary, or maybe one
> has just done CONFIG_FOO=y in some config fragment, but that had no
> effect because one would also have to do CONFIG_BAR=y.
>
> However, 2400+ lines of text are rather hard to read through. One
> probably uses a terminal emulator with capturing enabled, but
> searching back through the capture file is a little tedious, and one
> easily ends up finding something that doesn't pertain to the most
> recent 'config' command invocation.
>
> So make it possible to limit the output to those lines containing a
> given string. Like the search functionality in menuconfig, make it
> case insensitive, because it is much more convenient to type "config
> pinctrl" than "config PINCTRL".
>
> Since enabling CONFIG_CMD_CONFIG by itself adds over 10K of data, and
> that increases with every U-Boot release even if one doesn't add any
> new features to one's own defconfig (because the .config grows lots of
> "is not set"), I don't see any point in guarding this by some
> CONFIG_CMD_CONFIG_GREP.
>
> Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
> ---
> cmd/config.c | 25 ++++++++++++++++++++++---
> 1 file changed, 22 insertions(+), 3 deletions(-)
Reasonable addition and explanation (and having switched to tmux from
screen, I don't have an easy capture anymore, the one regret I have) so
this is very useful. My only feedback is that you should add
doc/usage/cmd/config.rst now too.
--
Tom
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 1/8] sh: clean up asm/string.h
2026-07-01 17:15 ` [PATCH 1/8] sh: clean up asm/string.h Rasmus Villemoes
@ 2026-07-02 8:29 ` Simon Glass
0 siblings, 0 replies; 21+ messages in thread
From: Simon Glass @ 2026-07-02 8:29 UTC (permalink / raw)
To: rv; +Cc: u-boot, Tom Rini, Casey Connolly
On 2026-07-01T17:15:27, Rasmus Villemoes <rv@rasmusvillemoes.dk> wrote:
> sh: clean up asm/string.h
>
> First, remove the !__KERNEL__ block, since U-Boot is always compiled
> with -D__KERNEL__.
>
> Second, remove the mention of the non-existing file
> arch/sh/lib/strcasecmp.c and the redundant declaration of strcasecmp()
> If sh did have a strcasecmp.c file, presumably the header would have
> had to #define __HAVE_ARCH_STRCASECMP.
>
> Third, remove the explicit #undefs of various __HAVE_ARCH_* and
> redundant declarations of standard functions, which are anyway
> declared in linux/string.h. In the linux source tree, those are all
> #defines, and indeed linux does have asm implementations of those functions.
>
> Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
>
> arch/sh/include/asm/string.h | 51 --------------------------------------------
> 1 file changed, 51 deletions(-)
Reviewed-by: Simon Glass <sjg@chromium.org>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 2/8] string: correct prototype of strchrnul()
2026-07-01 17:15 ` [PATCH 2/8] string: correct prototype of strchrnul() Rasmus Villemoes
@ 2026-07-02 8:30 ` Simon Glass
0 siblings, 0 replies; 21+ messages in thread
From: Simon Glass @ 2026-07-02 8:30 UTC (permalink / raw)
To: rv; +Cc: u-boot, Tom Rini, Casey Connolly
On 2026-07-01T17:15:27, Rasmus Villemoes <rv@rasmusvillemoes.dk> wrote:
> string: correct prototype of strchrnul()
>
> Both glibc's (where this originated as a GNU extension) and the
> kernel's versions of strchrnul() return "char *", not "const
> char *". That also makes it consistent with the standard strchr()
> function.
>
> Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
>
> include/linux/string.h | 2 +-
> lib/string.c | 4 ++--
> 2 files changed, 3 insertions(+), 3 deletions(-)
Reviewed-by: Simon Glass <sjg@chromium.org>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 3/8] string: correct documentation for strstr and strnstr
2026-07-01 17:15 ` [PATCH 3/8] string: correct documentation for strstr and strnstr Rasmus Villemoes
@ 2026-07-02 8:30 ` Simon Glass
0 siblings, 0 replies; 21+ messages in thread
From: Simon Glass @ 2026-07-02 8:30 UTC (permalink / raw)
To: rv; +Cc: u-boot, Tom Rini, Casey Connolly
On 2026-07-01T17:15:27, Rasmus Villemoes <rv@rasmusvillemoes.dk> wrote:
> string: correct documentation for strstr and strnstr
>
> The len parameter for strnstr() concerns the maximum size of the
> haystack to consider, not the length of the needle being searched for.
>
> strstr() obviously has no len parameter, so remove the copy-pasta.
>
> Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
>
> lib/string.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
Reviewed-by: Simon Glass <sjg@chromium.org>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 4/8] string: remove unused strswab() function
2026-07-01 17:15 ` [PATCH 4/8] string: remove unused strswab() function Rasmus Villemoes
@ 2026-07-02 8:30 ` Simon Glass
0 siblings, 0 replies; 21+ messages in thread
From: Simon Glass @ 2026-07-02 8:30 UTC (permalink / raw)
To: rv; +Cc: u-boot, Tom Rini, Casey Connolly
On 2026-07-01T17:15:27, Rasmus Villemoes <rv@rasmusvillemoes.dk> wrote:
> string: remove unused strswab() function
>
> The last use of this function with rather peculiar semantics[*] vanished
> in 2021 with 0a527fda782 ("Fix IDE commands issued, fix endian issues,
> fix non MMIO"). It has no tests, and should a need for something
> similar ever appear, it is better done with some proper
> utf16le/utf16be/utf16 abstractions rather than cluttering code with
> '#ifdef __LITTLE_ENDIAN'.
>
> [*] The byte-swapping itself is weird enough. But why is an input string
> of odd length ok, while the empty string is not allowed?
>
> Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
>
> include/linux/string.h | 4 ----
> lib/string.c | 28 ----------------------------
> 2 files changed, 32 deletions(-)
Reviewed-by: Simon Glass <sjg@chromium.org>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 5/8] string: remove more pointless __HAVE_ARCH_STR*
2026-07-01 17:15 ` [PATCH 5/8] string: remove more pointless __HAVE_ARCH_STR* Rasmus Villemoes
@ 2026-07-02 8:30 ` Simon Glass
0 siblings, 0 replies; 21+ messages in thread
From: Simon Glass @ 2026-07-02 8:30 UTC (permalink / raw)
To: rv; +Cc: u-boot, Tom Rini, Casey Connolly
On 2026-07-01T17:15:27, Rasmus Villemoes <rv@rasmusvillemoes.dk> wrote:
> string: remove more pointless __HAVE_ARCH_STR*
>
> None of these six macros are defined by any architecture. Moreover,
> the ifndef guard only exists in either string.h or string.c, making them
> completely pointless.
>
> I'm not sure whether we have an explicit coding style discouraging the
> 'extern' qualifier on function declarations, and string.h has a random
> mix of everything, but I can't leave it on strncasecmp() now that it
> will be immediately after strcasecmp() which doesn't have it.
>
> Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
>
> include/linux/string.h | 6 +-----
> lib/string.c | 8 --------
> 2 files changed, 1 insertion(+), 13 deletions(-)
Reviewed-by: Simon Glass <sjg@chromium.org>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 7/8] test: string: add test of new strcasestr() function
2026-07-01 17:15 ` [PATCH 7/8] test: string: add test of new strcasestr() function Rasmus Villemoes
@ 2026-07-02 8:30 ` Simon Glass
0 siblings, 0 replies; 21+ messages in thread
From: Simon Glass @ 2026-07-02 8:30 UTC (permalink / raw)
To: rv; +Cc: u-boot, Tom Rini, Casey Connolly
On 2026-07-01T17:15:27, Rasmus Villemoes <rv@rasmusvillemoes.dk> wrote:
> test: string: add test of new strcasestr() function
>
> Change the existing strstr() test a little so that the substring not
> found is 'bits', i.e. one that is actually found when doing case
> insensitive search.
>
> Then copy all of lib_strstr(), adapt the expectation for the
> strcasestr(s1, s3) result, and add another "not found" case.
>
> Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
>
> test/lib/string.c | 24 +++++++++++++++++++++---
> 1 file changed, 21 insertions(+), 3 deletions(-)
Reviewed-by: Simon Glass <sjg@chromium.org>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 6/8] string: add strcasestr()
2026-07-01 17:15 ` [PATCH 6/8] string: add strcasestr() Rasmus Villemoes
@ 2026-07-02 8:30 ` Simon Glass
2026-07-08 18:40 ` Rasmus Villemoes
0 siblings, 1 reply; 21+ messages in thread
From: Simon Glass @ 2026-07-02 8:30 UTC (permalink / raw)
To: rv; +Cc: u-boot, Tom Rini, Casey Connolly
Hi Rasmus,
On 2026-07-01T17:15:27, Rasmus Villemoes <rv@rasmusvillemoes.dk> wrote:
> string: add strcasestr()
>
> While this is not likely needed by any 'real' driver code, a later
> convenience addition to the 'config' command will need this. As usual,
> the linker will throw it away if nothing actually uses it, so it
> should have no size impact when not used.
>
> Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
>
> include/linux/string.h | 1 +
> lib/string.c | 27 +++++++++++++++++++++++++++
> 2 files changed, 28 insertions(+)
> diff --git a/include/linux/string.h b/include/linux/string.h
> @@ -77,6 +77,7 @@ extern __kernel_size_t strlen(const char *);
> #ifndef __HAVE_ARCH_STRNLEN
> extern __kernel_size_t strnlen(const char *,__kernel_size_t);
> #endif
> +char *strcasestr(const char *, const char *);
I've been trying to add proper function docs to newly added ones, so
we can clearly see the behaviour. Despite these being well-known
function, they sometimes differ in how they handle edge-conditions.
Also you could group this with the strstr()/strnstr() declarations a
few lines above, so it sits alongside its siblings.
Regards,
Simon
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 8/8] cmd: config: allow simple filtering of output
2026-07-01 17:15 ` [PATCH 8/8] cmd: config: allow simple filtering of output Rasmus Villemoes
2026-07-01 18:15 ` Tom Rini
@ 2026-07-02 8:30 ` Simon Glass
2026-07-08 18:59 ` Rasmus Villemoes
1 sibling, 1 reply; 21+ messages in thread
From: Simon Glass @ 2026-07-02 8:30 UTC (permalink / raw)
To: rv; +Cc: u-boot, Tom Rini, Casey Connolly
Hi Rasmus,
On 2026-07-01T17:15:27, Rasmus Villemoes <rv@rasmusvillemoes.dk> wrote:
> cmd: config: allow simple filtering of output
>
> When doing development, it can be quite useful to enable
> CONFIG_CMD_CONFIG, so that one can always check whether a config knob
> one has just enabled has actually made it to target.
>
> Because sometimes, one doesn't flash the right binary, or maybe one
> has just done CONFIG_FOO=y in some config fragment, but that had no
> effect because one would also have to do CONFIG_BAR=y.
>
> However, 2400+ lines of text are rather hard to read through. One
> probably uses a terminal emulator with capturing enabled, but
> searching back through the capture file is a little tedious, and one
> easily ends up finding something that doesn't pertain to the most
> recent 'config' command invocation.
>
> So make it possible to limit the output to those lines containing a
> given string. Like the search functionality in menuconfig, make it
> case insensitive, because it is much more convenient to type "config
> pinctrl" than "config PINCTRL".
> [...]
>
> cmd/config.c | 25 ++++++++++++++++++++++---
> 1 file changed, 22 insertions(+), 3 deletions(-)
> diff --git a/cmd/config.c b/cmd/config.c
> @@ -29,7 +29,23 @@ static int do_config(struct cmd_tbl *cmdtp, int flag, int argc,
> + while (b < e) {
> + n = strchrnul(b, '\n');
> + *n = '\0';
> +
> + if (strcasestr(b, s)) {
> + puts(b);
> + puts('\n');
> + }
> + b = n + 1;
> + }
The two puts() could be a single printf("%s\n", b). Also please add an
explicit #include <linux/string.h> now that we rely on strchrnul() and
strcasestr() here.
Reviewed-by: Simon Glass <sjg@chromium.org>
In addition to Tom's comment, how about a simple sandbox test?
Regards,
Simon
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 6/8] string: add strcasestr()
2026-07-02 8:30 ` Simon Glass
@ 2026-07-08 18:40 ` Rasmus Villemoes
2026-07-08 19:09 ` Tom Rini
0 siblings, 1 reply; 21+ messages in thread
From: Rasmus Villemoes @ 2026-07-08 18:40 UTC (permalink / raw)
To: Simon Glass; +Cc: u-boot, Tom Rini, Casey Connolly
On Thu, Jul 02 2026, "Simon Glass" <sjg@chromium.org> wrote:
> Hi Rasmus,
>
> On 2026-07-01T17:15:27, Rasmus Villemoes <rv@rasmusvillemoes.dk> wrote:
>> string: add strcasestr()
>>
>> While this is not likely needed by any 'real' driver code, a later
>> convenience addition to the 'config' command will need this. As usual,
>> the linker will throw it away if nothing actually uses it, so it
>> should have no size impact when not used.
>>
>> Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
>>
>> include/linux/string.h | 1 +
>> lib/string.c | 27 +++++++++++++++++++++++++++
>> 2 files changed, 28 insertions(+)
>
>> diff --git a/include/linux/string.h b/include/linux/string.h
>> @@ -77,6 +77,7 @@ extern __kernel_size_t strlen(const char *);
>> #ifndef __HAVE_ARCH_STRNLEN
>> extern __kernel_size_t strnlen(const char *,__kernel_size_t);
>> #endif
>> +char *strcasestr(const char *, const char *);
>
> I've been trying to add proper function docs to newly added ones, so
> we can clearly see the behaviour. Despite these being well-known
> function, they sometimes differ in how they handle edge-conditions.
>
> Also you could group this with the strstr()/strnstr() declarations a
> few lines above, so it sits alongside its siblings.
Sure, I can move the declaration up. As for function docs, they exist,
but in string.c, which is also where the docs for str[n]str is (an
earlier patch had fixups for those). I see some kernel docs in
string.h, and I dunno which is preferred, but most, including the
sibling str[n]str ones, are in the .c file. So I'll leave it there.
Rasmus
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 8/8] cmd: config: allow simple filtering of output
2026-07-02 8:30 ` Simon Glass
@ 2026-07-08 18:59 ` Rasmus Villemoes
0 siblings, 0 replies; 21+ messages in thread
From: Rasmus Villemoes @ 2026-07-08 18:59 UTC (permalink / raw)
To: Simon Glass; +Cc: u-boot, Tom Rini, Casey Connolly
On Thu, Jul 02 2026, "Simon Glass" <sjg@chromium.org> wrote:
> Hi Rasmus,
>
> On 2026-07-01T17:15:27, Rasmus Villemoes <rv@rasmusvillemoes.dk> wrote:
>> cmd: config: allow simple filtering of output
>>
>> When doing development, it can be quite useful to enable
>> CONFIG_CMD_CONFIG, so that one can always check whether a config knob
>> one has just enabled has actually made it to target.
>>
>> Because sometimes, one doesn't flash the right binary, or maybe one
>> has just done CONFIG_FOO=y in some config fragment, but that had no
>> effect because one would also have to do CONFIG_BAR=y.
>>
>> However, 2400+ lines of text are rather hard to read through. One
>> probably uses a terminal emulator with capturing enabled, but
>> searching back through the capture file is a little tedious, and one
>> easily ends up finding something that doesn't pertain to the most
>> recent 'config' command invocation.
>>
>> So make it possible to limit the output to those lines containing a
>> given string. Like the search functionality in menuconfig, make it
>> case insensitive, because it is much more convenient to type "config
>> pinctrl" than "config PINCTRL".
>> [...]
>>
>> cmd/config.c | 25 ++++++++++++++++++++++---
>> 1 file changed, 22 insertions(+), 3 deletions(-)
>
>> diff --git a/cmd/config.c b/cmd/config.c
>> @@ -29,7 +29,23 @@ static int do_config(struct cmd_tbl *cmdtp, int flag, int argc,
>> + while (b < e) {
>> + n = strchrnul(b, '\n');
>> + *n = '\0';
>> +
>> + if (strcasestr(b, s)) {
>> + puts(b);
>> + puts('\n');
>> + }
>> + b = n + 1;
>> + }
>
> The two puts() could be a single printf("%s\n", b).
Well, originally I just had the first puts(), then I found out that our
puts() is not standards-compliant (which would automatically add that
newline). I think I prefer keeping these as-is, to avoid a pathological
case of some .config line exceeding CONFIG_SYS_PBSIZE and then be
truncated (that could happen with some of the config options that are
potentially long lists of strings, OF_LIST, DEVICE_TREE_INCLUDES, the like).
> Also please add an explicit #include <linux/string.h> now that we rely
> on strchrnul() and strcasestr() here.
Ack.
> Reviewed-by: Simon Glass <sjg@chromium.org>
>
> In addition to Tom's comment, how about a simple sandbox test?
Ack.
Rasmus
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 6/8] string: add strcasestr()
2026-07-08 18:40 ` Rasmus Villemoes
@ 2026-07-08 19:09 ` Tom Rini
0 siblings, 0 replies; 21+ messages in thread
From: Tom Rini @ 2026-07-08 19:09 UTC (permalink / raw)
To: Rasmus Villemoes; +Cc: Simon Glass, u-boot, Casey Connolly
[-- Attachment #1: Type: text/plain, Size: 2024 bytes --]
On Wed, Jul 08, 2026 at 08:40:59PM +0200, Rasmus Villemoes wrote:
> On Thu, Jul 02 2026, "Simon Glass" <sjg@chromium.org> wrote:
>
> > Hi Rasmus,
> >
> > On 2026-07-01T17:15:27, Rasmus Villemoes <rv@rasmusvillemoes.dk> wrote:
> >> string: add strcasestr()
> >>
> >> While this is not likely needed by any 'real' driver code, a later
> >> convenience addition to the 'config' command will need this. As usual,
> >> the linker will throw it away if nothing actually uses it, so it
> >> should have no size impact when not used.
> >>
> >> Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
> >>
> >> include/linux/string.h | 1 +
> >> lib/string.c | 27 +++++++++++++++++++++++++++
> >> 2 files changed, 28 insertions(+)
> >
> >> diff --git a/include/linux/string.h b/include/linux/string.h
> >> @@ -77,6 +77,7 @@ extern __kernel_size_t strlen(const char *);
> >> #ifndef __HAVE_ARCH_STRNLEN
> >> extern __kernel_size_t strnlen(const char *,__kernel_size_t);
> >> #endif
> >> +char *strcasestr(const char *, const char *);
> >
> > I've been trying to add proper function docs to newly added ones, so
> > we can clearly see the behaviour. Despite these being well-known
> > function, they sometimes differ in how they handle edge-conditions.
> >
> > Also you could group this with the strstr()/strnstr() declarations a
> > few lines above, so it sits alongside its siblings.
>
> Sure, I can move the declaration up. As for function docs, they exist,
> but in string.c, which is also where the docs for str[n]str is (an
> earlier patch had fixups for those). I see some kernel docs in
> string.h, and I dunno which is preferred, but most, including the
> sibling str[n]str ones, are in the .c file. So I'll leave it there.
The most consistent place for kernel-doc comments has been in the header
files, and not C files. So it would be another part of this series of
cleanups, or a follow-up, to make that all consistent and make something
for doc/api/
--
Tom
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2026-07-08 19:09 UTC | newest]
Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-01 17:15 [PATCH 0/8] some string cleanup, and a tweak of the "config" command Rasmus Villemoes
2026-07-01 17:15 ` [PATCH 1/8] sh: clean up asm/string.h Rasmus Villemoes
2026-07-02 8:29 ` Simon Glass
2026-07-01 17:15 ` [PATCH 2/8] string: correct prototype of strchrnul() Rasmus Villemoes
2026-07-02 8:30 ` Simon Glass
2026-07-01 17:15 ` [PATCH 3/8] string: correct documentation for strstr and strnstr Rasmus Villemoes
2026-07-02 8:30 ` Simon Glass
2026-07-01 17:15 ` [PATCH 4/8] string: remove unused strswab() function Rasmus Villemoes
2026-07-02 8:30 ` Simon Glass
2026-07-01 17:15 ` [PATCH 5/8] string: remove more pointless __HAVE_ARCH_STR* Rasmus Villemoes
2026-07-02 8:30 ` Simon Glass
2026-07-01 17:15 ` [PATCH 6/8] string: add strcasestr() Rasmus Villemoes
2026-07-02 8:30 ` Simon Glass
2026-07-08 18:40 ` Rasmus Villemoes
2026-07-08 19:09 ` Tom Rini
2026-07-01 17:15 ` [PATCH 7/8] test: string: add test of new strcasestr() function Rasmus Villemoes
2026-07-02 8:30 ` Simon Glass
2026-07-01 17:15 ` [PATCH 8/8] cmd: config: allow simple filtering of output Rasmus Villemoes
2026-07-01 18:15 ` Tom Rini
2026-07-02 8:30 ` Simon Glass
2026-07-08 18:59 ` Rasmus Villemoes
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox