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