Martin Roth has submitted this change and it was merged. ( https://review.coreboot.org/c/coreboot/+/34450 )
Change subject: string: implement strspn, strcspn, atol ......................................................................
string: implement strspn, strcspn, atol
Change-Id: Id8fa880357124b620bde8884949bd8ffff7d0762 Signed-off-by: Patrick Georgi pgeorgi@google.com Reviewed-on: https://review.coreboot.org/c/coreboot/+/34450 Tested-by: build bot (Jenkins) no-reply@coreboot.org Reviewed-by: Julius Werner jwerner@chromium.org --- M src/include/string.h M src/lib/string.c 2 files changed, 55 insertions(+), 0 deletions(-)
Approvals: build bot (Jenkins): Verified Julius Werner: Looks good to me, approved
diff --git a/src/include/string.h b/src/include/string.h index 3024130..d3f09ff 100644 --- a/src/include/string.h +++ b/src/include/string.h @@ -32,6 +32,9 @@ char *strcpy(char *dst, const char *src); int strcmp(const char *s1, const char *s2); int strncmp(const char *s1, const char *s2, int maxlen); +int strspn(const char *str, const char *spn); +int strcspn(const char *str, const char *spn); +long atol(const char *str);
/** * Find a character in a string. diff --git a/src/lib/string.c b/src/lib/string.c index eb6adb6..f0c24ed 100644 --- a/src/lib/string.c +++ b/src/lib/string.c @@ -132,3 +132,55 @@ i = i*10 + *((*s)++) - '0'; return i; } + +int strspn(const char *str, const char *spn) +{ + int ret = 0; + + while (*str != 0) { + const char *p; + for (p = spn; *str != *p; p++) + if (*p == '\0') + return ret; + ret++; + str++; + } + return ret; +} + +int strcspn(const char *str, const char *spn) +{ + int ret = 0; + + while (*str != 0) { + const char *p; + for (p = spn; *p != '\0'; p++) + if (*p == *str) + return ret; + ret++; + str++; + } + return ret; +} + +long atol(const char *str) +{ + long ret = 0; + long sign = 1; + + str += strspn(str, " \t\n\r\f\v"); + + if (*str == '+') { + sign = 1; + str++; + } else if (*str == '-') { + sign = -1; + str++; + } + + while (isdigit(*str)) { + ret *= 10; + ret += *str++ - '0'; + } + return ret * sign; +}