summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin/ctype.h16
-rw-r--r--builtin/stdlib.c10
-rw-r--r--builtin/stdlib.h11
-rw-r--r--builtin/string.h24
-rw-r--r--builtin/strings.h14
-rw-r--r--include/util.h55
6 files changed, 78 insertions, 52 deletions
diff --git a/builtin/ctype.h b/builtin/ctype.h
new file mode 100644
index 0000000000..682cc05694
--- /dev/null
+++ b/builtin/ctype.h
@@ -0,0 +1,16 @@
+/* Copyright 2022 The ChromiumOS Authors.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef __CROS_EC_CTYPE_H__
+#define __CROS_EC_CTYPE_H__
+
+int isdigit(int c);
+int isspace(int c);
+int isalpha(int c);
+int isupper(int c);
+int isprint(int c);
+int tolower(int c);
+
+#endif /* __CROS_EC_CTYPE_H__ */
diff --git a/builtin/stdlib.c b/builtin/stdlib.c
index e42788c4af..1d07b64869 100644
--- a/builtin/stdlib.c
+++ b/builtin/stdlib.c
@@ -8,6 +8,16 @@
#include "common.h"
#include "console.h"
#include "util.h"
+/*
+ * The following macros are defined in stdlib.h in the C standard library, which
+ * conflict with the definitions in this file.
+ */
+#undef isspace
+#undef isdigit
+#undef isalpha
+#undef isupper
+#undef isprint
+#undef tolower
/*
* TODO(b/237712836): Zephyr's libc should provide strcasecmp. For now we'll
diff --git a/builtin/stdlib.h b/builtin/stdlib.h
new file mode 100644
index 0000000000..fa62a18589
--- /dev/null
+++ b/builtin/stdlib.h
@@ -0,0 +1,11 @@
+/* Copyright 2022 The ChromiumOS Authors.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef __CROS_EC_STDLIB_H__
+#define __CROS_EC_STDLIB_H__
+
+int atoi(const char *nptr);
+
+#endif /* __CROS_EC_STDLIB_H__ */
diff --git a/builtin/string.h b/builtin/string.h
index 8c9a71bd75..1e4c45b082 100644
--- a/builtin/string.h
+++ b/builtin/string.h
@@ -3,10 +3,8 @@
* found in the LICENSE file.
*/
-/* This header is only needed for CR50 compatibility */
-
-#ifndef __CROS_EC_STRINGS_H__
-#define __CROS_EC_STRINGS_H__
+#ifndef __CROS_EC_STRING_H__
+#define __CROS_EC_STRING_H__
#include <stddef.h>
@@ -20,12 +18,28 @@ void *memmove(void *dest, const void *src, size_t n);
void *memset(void *dest, int c, size_t len);
void *memchr(const void *buffer, int c, size_t n);
+size_t strlen(const char *s);
size_t strnlen(const char *s, size_t maxlen);
char *strncpy(char *dest, const char *src, size_t n);
int strncmp(const char *s1, const char *s2, size_t n);
+/**
+ * Calculates the length of the initial segment of s which consists
+ * entirely of bytes not in reject.
+ */
+size_t strcspn(const char *s, const char *reject);
+
+/**
+ * Find the first occurrence of the substring <s2> in the string <s1>
+ *
+ * @param s1 String where <s2> is searched.
+ * @param s2 Substring to be located in <s1>
+ * @return Pointer to the located substring or NULL if not found.
+ */
+char *strstr(const char *s1, const char *s2);
+
#ifdef __cplusplus
}
#endif
-#endif /* __CROS_EC_STRINGS_H__ */
+#endif /* __CROS_EC_STRING_H__ */
diff --git a/builtin/strings.h b/builtin/strings.h
new file mode 100644
index 0000000000..767706d579
--- /dev/null
+++ b/builtin/strings.h
@@ -0,0 +1,14 @@
+/* Copyright 2022 The ChromiumOS Authors.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef __CROS_EC_STRINGS_H__
+#define __CROS_EC_STRINGS_H__
+
+#include <stddef.h>
+
+int strcasecmp(const char *s1, const char *s2);
+int strncasecmp(const char *s1, const char *s2, size_t size);
+
+#endif /* __CROS_EC_STRINGS_H__ */
diff --git a/include/util.h b/include/util.h
index 8339838abd..28fdb7b9fe 100644
--- a/include/util.h
+++ b/include/util.h
@@ -13,10 +13,18 @@
#include "panic.h"
#include "builtin/assert.h" /* For ASSERT(). */
+#include <ctype.h>
#include <stdbool.h>
#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
#ifdef CONFIG_ZEPHYR
#include <zephyr/sys/util.h>
+/**
+ * TODO(b/237712836): Remove once Zephyr's libc has strcasecmp.
+ */
+#include "builtin/strings.h"
#endif
#ifdef __cplusplus
@@ -101,52 +109,6 @@ extern "C" {
b = __t__; \
} while (0)
-#ifndef HIDE_EC_STDLIB
-
-/* Standard library functions */
-int atoi(const char *nptr);
-
-#ifdef CONFIG_ZEPHYR
-#include <ctype.h>
-#include <string.h>
-#else
-int isdigit(int c);
-int isspace(int c);
-int isalpha(int c);
-int isupper(int c);
-int isprint(int c);
-int tolower(int c);
-
-int memcmp(const void *s1, const void *s2, size_t len);
-void *memcpy(void *dest, const void *src, size_t len);
-void *memset(void *dest, int c, size_t len);
-void *memmove(void *dest, const void *src, size_t len);
-void *memchr(const void *buffer, int c, size_t n);
-
-/**
- * Find the first occurrence of the substring <s2> in the string <s1>
- *
- * @param s1 String where <s2> is searched.
- * @param s2 Substring to be located in <s1>
- * @return Pointer to the located substring or NULL if not found.
- */
-char *strstr(const char *s1, const char *s2);
-
-/**
- * Calculates the length of the initial segment of s which consists
- * entirely of bytes not in reject.
- */
-size_t strcspn(const char *s, const char *reject);
-
-size_t strlen(const char *s);
-char *strncpy(char *dest, const char *src, size_t n);
-int strncmp(const char *s1, const char *s2, size_t n);
-#endif
-
-int strcasecmp(const char *s1, const char *s2);
-int strncasecmp(const char *s1, const char *s2, size_t size);
-size_t strnlen(const char *s, size_t maxlen);
-
/* Like strtol(), but for integers. */
int strtoi(const char *nptr, char **endptr, int base);
@@ -173,7 +135,6 @@ char *strzcpy(char *dest, const char *src, int len);
* Other strings return 0 and leave *dest unchanged.
*/
int parse_bool(const char *s, int *dest);
-#endif /* !HIDE_EC_STDLIB */
/**
* Constant time implementation of memcmp to avoid timing side channels.