Add strlen() and strnlen() to commonlib/bsd by rewriting them from scratch, and remove the same functions from coreboot and libpayload. Note that in the existing libpayload implementation, these functions return 0 for NULL strings. Given that POSIX doesn't require the NULL check and that other major libc implementations (e.g. glibc [1]) don't seem to do that, the new functions also don't perform the NULL check. [1] https://github.com/bminor/glibc/blob/master/sysdeps/i386/strlen.c Change-Id: I1203ec9affabe493bd14b46662d212b08240cced Signed-off-by: Yu-Ping Wu <yupingso@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/83830 Reviewed-by: Maximilian Brune <maximilian.brune@9elements.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Julius Werner <jwerner@chromium.org>
35 lines
583 B
C
35 lines
583 B
C
/* SPDX-License-Identifier: BSD-3-Clause */
|
|
|
|
#include <commonlib/bsd/string.h>
|
|
#include <ctype.h>
|
|
#include <stddef.h>
|
|
|
|
size_t strlen(const char *str)
|
|
{
|
|
const char *ptr = str;
|
|
|
|
while (*ptr++)
|
|
;
|
|
return ptr - str - 1;
|
|
}
|
|
|
|
size_t strnlen(const char *str, size_t maxlen)
|
|
{
|
|
const char *ptr = str;
|
|
const char *end = str + maxlen + 1;
|
|
|
|
while (*ptr++ && ptr < end)
|
|
;
|
|
return ptr - str - 1;
|
|
}
|
|
|
|
unsigned int skip_atoi(char **ptr)
|
|
{
|
|
unsigned int result = 0;
|
|
char *str;
|
|
|
|
for (str = *ptr; isdigit(str[0]); str++)
|
|
result = result * 10 + (str[0] - '0');
|
|
*ptr = str;
|
|
return result;
|
|
}
|