From 6b212d8fcff125a831c0ba068903afd0b22d292c Mon Sep 17 00:00:00 2001 From: Yuji Sasaki Date: Wed, 12 Jun 2019 17:42:19 -0700 Subject: string: implement strspn, strcspn, atol Change-Id: Id8fa880357124b620bde8884949bd8ffff7d0762 Signed-off-by: Patrick Georgi Reviewed-on: https://review.coreboot.org/c/coreboot/+/34450 Tested-by: build bot (Jenkins) Reviewed-by: Julius Werner --- src/lib/string.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'src/lib/string.c') diff --git a/src/lib/string.c b/src/lib/string.c index eb6adb67c7..f0c24edcfc 100644 --- a/src/lib/string.c +++ b/src/lib/string.c @@ -132,3 +132,55 @@ unsigned int skip_atoi(char **s) 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; +} -- cgit v1.2.3