summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--payloads/libpayload/include/string.h1
-rw-r--r--payloads/libpayload/libc/Makefile.mk1
-rw-r--r--src/commonlib/Makefile.mk4
-rw-r--r--src/commonlib/bsd/include/commonlib/bsd/string.h10
-rw-r--r--src/commonlib/bsd/string.c15
-rw-r--r--src/include/string.h8
-rw-r--r--src/lib/string.c9
-rw-r--r--tests/commonlib/bsd/Makefile.mk4
-rw-r--r--tests/commonlib/bsd/string-test.c38
-rw-r--r--tests/lib/string-test.c26
10 files changed, 74 insertions, 42 deletions
diff --git a/payloads/libpayload/include/string.h b/payloads/libpayload/include/string.h
index e87dea5def..f4ce41fce7 100644
--- a/payloads/libpayload/include/string.h
+++ b/payloads/libpayload/include/string.h
@@ -29,6 +29,7 @@
#ifndef _STRING_H
#define _STRING_H
+#include <commonlib/bsd/string.h>
#include <stddef.h>
/**
diff --git a/payloads/libpayload/libc/Makefile.mk b/payloads/libpayload/libc/Makefile.mk
index c9fc17a7b5..5a65565e55 100644
--- a/payloads/libpayload/libc/Makefile.mk
+++ b/payloads/libpayload/libc/Makefile.mk
@@ -47,6 +47,7 @@ ifeq ($(CONFIG_LP_LIBC),y)
libc-srcs += $(coreboottop)/src/commonlib/bsd/elog.c
libc-srcs += $(coreboottop)/src/commonlib/bsd/gcd.c
libc-srcs += $(coreboottop)/src/commonlib/bsd/ipchksum.c
+libc-srcs += $(coreboottop)/src/commonlib/bsd/string.c
ifeq ($(CONFIG_LP_GPL),y)
libc-srcs += $(coreboottop)/src/commonlib/list.c
endif
diff --git a/src/commonlib/Makefile.mk b/src/commonlib/Makefile.mk
index 30aaddf2cc..00f3629c1e 100644
--- a/src/commonlib/Makefile.mk
+++ b/src/commonlib/Makefile.mk
@@ -65,3 +65,7 @@ decompressor-y += bsd/gcd.c
all-y += bsd/gcd.c
all-y += bsd/ipchksum.c
+
+decompressor-y += bsd/string.c
+smm-y += bsd/string.c
+all-y += bsd/string.c
diff --git a/src/commonlib/bsd/include/commonlib/bsd/string.h b/src/commonlib/bsd/include/commonlib/bsd/string.h
new file mode 100644
index 0000000000..bbd4754800
--- /dev/null
+++ b/src/commonlib/bsd/include/commonlib/bsd/string.h
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+
+#ifndef _COMMONLIB_BSD_STRING_H_
+#define _COMMONLIB_BSD_STRING_H_
+
+#include <stdint.h>
+
+unsigned int skip_atoi(char **ptr);
+
+#endif /* _COMMONLIB_BSD_STRING_H_ */
diff --git a/src/commonlib/bsd/string.c b/src/commonlib/bsd/string.c
new file mode 100644
index 0000000000..3286d41b1c
--- /dev/null
+++ b/src/commonlib/bsd/string.c
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+
+#include <commonlib/bsd/string.h>
+#include <ctype.h>
+
+unsigned int skip_atoi(char **ptr)
+{
+ unsigned int result = 0;
+ char *str;
+
+ for (str = *ptr; isdigit(str[0]); str++)
+ result = result * 10 + (str[0] - '0');
+ *ptr = str;
+ return result;
+}
diff --git a/src/include/string.h b/src/include/string.h
index 33f0dfe196..e752f8f531 100644
--- a/src/include/string.h
+++ b/src/include/string.h
@@ -3,6 +3,7 @@
#ifndef STRING_H
#define STRING_H
+#include <commonlib/bsd/string.h>
#include <stddef.h>
void *memcpy(void *dest, const void *src, size_t n);
@@ -36,11 +37,4 @@ long atol(const char *str);
*/
char *strrchr(const char *s, int c);
-/*
- * Parses an unsigned integer and moves the input pointer forward to the first
- * character that's not a valid digit. s and *s must not be NULL. Result
- * undefined if it overruns the return type size.
- */
-unsigned int skip_atoi(char **s);
-
#endif /* STRING_H */
diff --git a/src/lib/string.c b/src/lib/string.c
index dd7d1512ea..d23ed1f7e5 100644
--- a/src/lib/string.c
+++ b/src/lib/string.c
@@ -125,15 +125,6 @@ int strncmp(const char *s1, const char *s2, int maxlen)
return 0;
}
-unsigned int skip_atoi(char **s)
-{
- unsigned int i = 0;
-
- while (isdigit(**s))
- i = i*10 + *((*s)++) - '0';
- return i;
-}
-
int strspn(const char *str, const char *spn)
{
int ret = 0;
diff --git a/tests/commonlib/bsd/Makefile.mk b/tests/commonlib/bsd/Makefile.mk
index 3de223e707..ee710bcdb9 100644
--- a/tests/commonlib/bsd/Makefile.mk
+++ b/tests/commonlib/bsd/Makefile.mk
@@ -3,6 +3,7 @@
tests-y += helpers-test
tests-y += gcd-test
tests-y += ipchksum-test
+tests-y += string-test
helpers-test-srcs += tests/commonlib/bsd/helpers-test.c
@@ -11,3 +12,6 @@ gcd-test-srcs += src/commonlib/bsd/gcd.c
ipchksum-test-srcs += tests/commonlib/bsd/ipchksum-test.c
ipchksum-test-srcs += src/commonlib/bsd/ipchksum.c
+
+string-test-srcs += tests/commonlib/bsd/string-test.c
+string-test-srcs += src/commonlib/bsd/string.c
diff --git a/tests/commonlib/bsd/string-test.c b/tests/commonlib/bsd/string-test.c
new file mode 100644
index 0000000000..d94b82e18c
--- /dev/null
+++ b/tests/commonlib/bsd/string-test.c
@@ -0,0 +1,38 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <commonlib/bsd/string.h>
+#include <tests/test.h>
+
+/* Used to test skip_atoi */
+struct str_with_u_val_t {
+ char *str;
+ uint32_t value;
+ uint32_t offset;
+} str_with_u_val[] = {
+ {"42aa", 42, 2},
+ {"a", 0, 0},
+ {"0", 0, 1},
+ {"4a2", 4, 1},
+};
+
+static void test_skip_atoi(void **state)
+{
+ int i;
+ char *ptr, *copy;
+
+ for (i = 0; i < ARRAY_SIZE(str_with_u_val); i++) {
+ ptr = str_with_u_val[i].str;
+ copy = ptr;
+ assert_true(str_with_u_val[i].value == skip_atoi(&ptr));
+ assert_int_equal(str_with_u_val[i].offset, ptr - copy);
+ }
+}
+
+int main(void)
+{
+ const struct CMUnitTest tests[] = {
+ cmocka_unit_test(test_skip_atoi),
+ };
+
+ return cb_run_group_tests(tests, NULL, NULL);
+}
diff --git a/tests/lib/string-test.c b/tests/lib/string-test.c
index 621a74ceff..17bb69ab56 100644
--- a/tests/lib/string-test.c
+++ b/tests/lib/string-test.c
@@ -43,18 +43,6 @@ struct str_with_l_val_t {
{"\t\n\r\f\v-42", -42},
};
-/* Used to test skip_atoi */
-struct str_with_u_val_t {
- char *str;
- uint32_t value;
- uint32_t offset;
-} str_with_u_val[] = {
- {"42aa", 42, 2},
- {"a", 0, 0},
- {"0", 0, 1},
- {"4a2", 4, 1},
-};
-
static void test_strdup(void **state)
{
char str[] = "Hello coreboot\n";
@@ -204,19 +192,6 @@ static void test_strncmp(void **state)
assert_int_equal(0, strncmp(str, str2, str2_len - 1));
}
-static void test_skip_atoi(void **state)
-{
- int i;
- char *ptr, *copy;
-
- for (i = 0; i < ARRAY_SIZE(str_with_u_val); i++) {
- ptr = str_with_u_val[i].str;
- copy = ptr;
- assert_true(str_with_u_val[i].value == skip_atoi(&ptr));
- assert_int_equal(str_with_u_val[i].offset, ptr - copy);
- }
-}
-
static void test_strspn(void **state)
{
char str[] = "4213401234";
@@ -260,7 +235,6 @@ int main(void)
cmocka_unit_test(test_strcpy),
cmocka_unit_test(test_strcmp),
cmocka_unit_test(test_strncmp),
- cmocka_unit_test(test_skip_atoi),
cmocka_unit_test(test_strspn),
cmocka_unit_test(test_strcspn),
cmocka_unit_test(test_atol),