summaryrefslogtreecommitdiff
path: root/include/util.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/util.h')
-rw-r--r--include/util.h149
1 files changed, 66 insertions, 83 deletions
diff --git a/include/util.h b/include/util.h
index e39b81ccdf..dc2e038705 100644
--- a/include/util.h
+++ b/include/util.h
@@ -1,4 +1,4 @@
-/* Copyright 2012 The Chromium OS Authors. All rights reserved.
+/* Copyright 2012 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
@@ -10,13 +10,19 @@
#include "common.h"
#include "compile_time_macros.h"
-#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
@@ -27,21 +33,21 @@ extern "C" {
#define GENERIC_MAX(x, y) ((x) > (y) ? (x) : (y))
#define GENERIC_MIN(x, y) ((x) < (y) ? (x) : (y))
#ifndef MAX
-#define MAX(a, b) \
- ({ \
- __typeof__(a) temp_a = (a); \
- __typeof__(b) temp_b = (b); \
- \
- GENERIC_MAX(temp_a, temp_b); \
+#define MAX(a, b) \
+ ({ \
+ __typeof__(a) temp_a = (a); \
+ __typeof__(b) temp_b = (b); \
+ \
+ GENERIC_MAX(temp_a, temp_b); \
})
#endif
#ifndef MIN
-#define MIN(a, b) \
- ({ \
- __typeof__(a) temp_a = (a); \
- __typeof__(b) temp_b = (b); \
- \
- GENERIC_MIN(temp_a, temp_b); \
+#define MIN(a, b) \
+ ({ \
+ __typeof__(a) temp_a = (a); \
+ __typeof__(b) temp_b = (b); \
+ \
+ GENERIC_MIN(temp_a, temp_b); \
})
#endif
#ifndef NULL
@@ -69,11 +75,11 @@ extern "C" {
* contains the base struct. This requires knowing where in the contained
* struct the base struct resides, this is the member parameter to downcast.
*/
-#define DOWNCAST(pointer, type, member) \
- ((type *)(((uint8_t *) pointer) - offsetof(type, member)))
+#define DOWNCAST(pointer, type, member) \
+ ((type *)(((uint8_t *)pointer) - offsetof(type, member)))
/* True of x is a power of two */
-#define POWER_OF_TWO(x) ((x) && !((x) & ((x) - 1)))
+#define POWER_OF_TWO(x) ((x) && !((x) & ((x)-1)))
/* Macro to check if the value is in range */
#ifndef CONFIG_ZEPHYR
@@ -84,7 +90,7 @@ extern "C" {
* macros for integer division with various rounding variants
* default integer division rounds down.
*/
-#define DIV_ROUND_UP(x, y) (((x) + ((y) - 1)) / (y))
+#define DIV_ROUND_UP(x, y) (((x) + ((y)-1)) / (y))
#define DIV_ROUND_NEAREST(x, y) (((x) + ((y) / 2)) / (y))
/*
@@ -93,60 +99,14 @@ extern "C" {
* Swapping composites (e.g. a+b, x++) doesn't make sense. So, <a> and <b>
* can only be a variable (x) or a pointer reference (*x) without operator.
*/
-#define swap(a, b) \
- do { \
+#define swap(a, b) \
+ do { \
typeof(a) __t__; \
- __t__ = a; \
- a = b; \
- b = __t__; \
+ __t__ = a; \
+ a = b; \
+ 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 +133,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.
@@ -234,7 +193,7 @@ int alignment_log2(unsigned int x);
*/
void reverse(void *dest, size_t len);
-
+int find_base(int base, int *c, const char **nptr);
/****************************************************************************/
/* Conditional stuff.
*
@@ -261,25 +220,49 @@ typedef uint8_t cond_t;
/* Initialize a conditional to a specific state. Do this first. */
void cond_init(cond_t *c, int boolean);
-static inline void cond_init_false(cond_t *c) { cond_init(c, 0); }
-static inline void cond_init_true(cond_t *c) { cond_init(c, 1); }
+static inline void cond_init_false(cond_t *c)
+{
+ cond_init(c, 0);
+}
+static inline void cond_init_true(cond_t *c)
+{
+ cond_init(c, 1);
+}
/* Set the current state. Do this as often as you like. */
void cond_set(cond_t *c, int boolean);
-static inline void cond_set_false(cond_t *c) { cond_set(c, 0); }
-static inline void cond_set_true(cond_t *c) { cond_set(c, 1); }
+static inline void cond_set_false(cond_t *c)
+{
+ cond_set(c, 0);
+}
+static inline void cond_set_true(cond_t *c)
+{
+ cond_set(c, 1);
+}
/* Get the current state. Do this as often as you like. */
int cond_is(cond_t *c, int boolean);
-static inline int cond_is_false(cond_t *c) { return cond_is(c, 0); }
-static inline int cond_is_true(cond_t *c) { return cond_is(c, 1); }
+static inline int cond_is_false(cond_t *c)
+{
+ return cond_is(c, 0);
+}
+static inline int cond_is_true(cond_t *c)
+{
+ return cond_is(c, 1);
+}
/* See if the state has transitioned. If it has, the corresponding function
* will return true ONCE only, until it's changed back.
*/
int cond_went(cond_t *c, int boolean);
-static inline int cond_went_false(cond_t *c) { return cond_went(c, 0); }
-static inline int cond_went_true(cond_t *c) { return cond_went(c, 1); }
+static inline int cond_went_false(cond_t *c)
+{
+ return cond_went(c, 0);
+}
+static inline int cond_went_true(cond_t *c)
+{
+ return cond_went(c, 1);
+}
/****************************************************************************/
/* Console command parsing */
@@ -287,8 +270,8 @@ static inline int cond_went_true(cond_t *c) { return cond_went(c, 1); }
/* Parse command-line arguments given integer shift value to obtain
* offset and size.
*/
-int parse_offset_size(int argc, char **argv, int shift,
- int *offset, int *size);
+int parse_offset_size(int argc, const char **argv, int shift, int *offset,
+ int *size);
/**
* Print binary in hex and ASCII
@@ -396,4 +379,4 @@ int ternary_from_bits(int *bits, int nbits);
}
#endif
-#endif /* __CROS_EC_UTIL_H */
+#endif /* __CROS_EC_UTIL_H */