mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2026-04-13 06:11:37 +01:00
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:
@@ -88,13 +88,12 @@ char *sbi_strncpy(char *dest, const char *src, size_t count)
|
||||
|
||||
char *sbi_strchr(const char *s, int c)
|
||||
{
|
||||
while (*s != '\0' && *s != (char)c)
|
||||
s++;
|
||||
|
||||
if (*s == '\0')
|
||||
return NULL;
|
||||
else
|
||||
do {
|
||||
if (*s == (char)c)
|
||||
return (char *)s;
|
||||
} while (*s++ != '\0');
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *sbi_strrchr(const char *s, int c)
|
||||
|
||||
Reference in New Issue
Block a user