diff options
-rw-r--r-- | src/include/string.h | 3 | ||||
-rw-r--r-- | src/lib/string.c | 52 |
2 files changed, 55 insertions, 0 deletions
diff --git a/src/include/string.h b/src/include/string.h index 30241303eb..d3f09ff102 100644 --- a/src/include/string.h +++ b/src/include/string.h @@ -32,6 +32,9 @@ char *strncpy(char *to, const char *from, int count); 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 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; +} |