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