lib: Fix sbi_strchr to correctly handle null terminator search

The original sbi_strchr implementation did not conform to the C standard
behavior. According to the C standard and POSIX specification, strchr(s, 0)
should return a pointer to the null terminator at the end of string s.

The previous implementation used a while loop that would terminate when
either reaching the end of string or finding the character, but it would
return NULL when searching for the null terminator instead of returning
a pointer to the null terminator itself.

The fixed implementation uses a do-while loop that ensures even when
searching for the null terminator, the function correctly returns a
pointer to the null terminator position rather than NULL.

This fix ensures sbi_strchr behavior aligns with standard library
function semantics, making it more predictable and safe for users
expecting standard C library behavior.

Signed-off-by: Chen Pei <cp0613@linux.alibaba.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
Link: https://lore.kernel.org/r/20260306094425.1918-3-cp0613@linux.alibaba.com
Signed-off-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
Chen Pei
2026-03-06 17:44:25 +08:00
committed by Anup Patel
parent fdb78b0ec5
commit 2bf0de88c8

View File

@@ -88,13 +88,12 @@ char *sbi_strncpy(char *dest, const char *src, size_t count)
char *sbi_strchr(const char *s, int c) char *sbi_strchr(const char *s, int c)
{ {
while (*s != '\0' && *s != (char)c) do {
s++; if (*s == (char)c)
if (*s == '\0')
return NULL;
else
return (char *)s; return (char *)s;
} while (*s++ != '\0');
return NULL;
} }
char *sbi_strrchr(const char *s, int c) char *sbi_strrchr(const char *s, int c)