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>
This commit is contained in:
Yuji Sasaki
2019-06-12 17:42:19 -07:00
committed by Martin Roth
parent e2c24f783d
commit 6b212d8fcf
2 changed files with 55 additions and 0 deletions

View File

@ -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;
}