summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Watson <jarrah@users.sourceforge.net>2004-03-13 03:34:52 +0000
committerGreg Watson <jarrah@users.sourceforge.net>2004-03-13 03:34:52 +0000
commit1624782bbe44018a1784cf78839bc4ec95802fdf (patch)
tree3146158ccef4ebb8ab1e5f74aba1dc3ae8ffe147
parentfd27f5ee344dcaf5c843adbff4f3f3a115dbbd40 (diff)
extra functions
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1405 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
-rw-r--r--src/include/string.h91
1 files changed, 86 insertions, 5 deletions
diff --git a/src/include/string.h b/src/include/string.h
index 111e23bc15..1c07af0ca5 100644
--- a/src/include/string.h
+++ b/src/include/string.h
@@ -2,6 +2,14 @@
#define STRING_H
#include <stddef.h>
+#include <stdlib.h>
+
+extern void *memcpy(void *dest, const void *src, size_t n);
+extern void *memmove(void *dest, const void *src, size_t n);
+extern void *memset(void *s, int c, size_t n);
+extern int memcmp(const void *s1, const void *s2, size_t n);
+
+extern int sprintf(char * buf, const char *fmt, ...);
// yes, linux has fancy ones. We don't care. This stuff gets used
// hardly at all. And the pain of including those files is just too high.
@@ -28,10 +36,83 @@ static inline size_t strlen(const char *src)
return i;
}
-extern void *memcpy(void *dest, const void *src, size_t n);
-extern void *memmove(void *dest, const void *src, size_t n);
-extern void *memset(void *s, int c, size_t n);
-extern int memcmp(const void *s1, const void *s2, size_t n);
+static inline char *strchr(const char *s, int c)
+{
+ for (; *s; s++) {
+ if (*s == c)
+ return (char *) s;
+ }
+ return 0;
+}
-extern int sprintf(char * buf, const char *fmt, ...);
+static inline char *strdup(const char *s)
+{
+ size_t sz = strlen(s) + 1;
+ char *d = malloc(sz);
+ memcpy(d, s, sz);
+ return d;
+}
+
+static inline char *strncpy(char *to, const char *from, int count)
+{
+ register char *ret = to;
+
+ while (count > 0) {
+ count--;
+ if ((*to++ = *from++) == '\0')
+ break;
+ }
+
+ while (count > 0) {
+ count--;
+ *to++ = '\0';
+ }
+ return ret;
+}
+
+static inline int strcmp(const char *s1, const char *s2)
+{
+ int r;
+
+ while ((r = (*s1 - *s2)) == 0 && *s1) {
+ s1++;
+ s2++;
+ }
+ return r;
+}
+
+static inline int isspace(int c)
+{
+ switch (c) {
+ case ' ': case '\f': case '\n':
+ case '\r': case '\t': case '\v':
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+static inline int isdigit(int c)
+{
+ return (c >= '0' && c <= '9');
+}
+
+static inline int isxdigit(int c)
+{
+ return ((c >= '0' && c <= '9') ||
+ (c >= 'a' && c <= 'f') ||
+ (c >= 'A' && c <= 'F'));
+}
+
+static inline int islower(int c)
+{
+ return (c >= 'a' && c <= 'z');
+}
+
+static inline int toupper(int c)
+{
+ if (islower(c))
+ c -= 'a'-'A';
+ return c;
+}
#endif /* STRING_H */