blob: 21689473ce39342f43011e7e6ab842baca3a09e0 [file] [log] [blame]
Eric Biederman8ca8d762003-04-22 19:02:15 +00001#ifndef STRING_H
2#define STRING_H
3
4#include <stddef.h>
Greg Watson16247822004-03-13 03:34:52 +00005#include <stdlib.h>
6
Stefan Reinauera91e0fe2008-08-01 11:39:35 +00007void *memcpy(void *dest, const void *src, size_t n);
8void *memmove(void *dest, const void *src, size_t n);
9void *memset(void *s, int c, size_t n);
10int memcmp(const void *s1, const void *s2, size_t n);
Stefan Reinauer35b6bbb2010-03-28 21:26:54 +000011#if !defined(__PRE_RAM__)
Stefan Reinauera91e0fe2008-08-01 11:39:35 +000012int sprintf(char * buf, const char *fmt, ...);
Stefan Reinauer6bd571e2009-09-25 21:59:57 +000013#endif
Eric Biederman8ca8d762003-04-22 19:02:15 +000014
Stefan Reinauer14e22772010-04-27 06:56:47 +000015// simple string functions
Eric Biederman8ca8d762003-04-22 19:02:15 +000016
Stefan Reinauer14e22772010-04-27 06:56:47 +000017static inline size_t strnlen(const char *src, size_t max)
18{
Eric Biederman8ca8d762003-04-22 19:02:15 +000019 size_t i = 0;
20 while((*src++) && (i < max)) {
21 i++;
22 }
23 return i;
24}
25
26static inline size_t strlen(const char *src)
27{
28 size_t i = 0;
29 while(*src++) {
30 i++;
31 }
32 return i;
33}
34
Greg Watson16247822004-03-13 03:34:52 +000035static inline char *strchr(const char *s, int c)
36{
37 for (; *s; s++) {
38 if (*s == c)
39 return (char *) s;
Stefan Reinauer14e22772010-04-27 06:56:47 +000040 }
Greg Watson16247822004-03-13 03:34:52 +000041 return 0;
42}
Eric Biederman8ca8d762003-04-22 19:02:15 +000043
Stefan Reinauer35b6bbb2010-03-28 21:26:54 +000044#if !defined(__PRE_RAM__)
Greg Watson16247822004-03-13 03:34:52 +000045static inline char *strdup(const char *s)
Stefan Reinauer14e22772010-04-27 06:56:47 +000046{
Greg Watson16247822004-03-13 03:34:52 +000047 size_t sz = strlen(s) + 1;
48 char *d = malloc(sz);
49 memcpy(d, s, sz);
50 return d;
51}
Stefan Reinauer951f5882009-07-19 00:18:15 +000052#endif
Greg Watson16247822004-03-13 03:34:52 +000053
54static inline char *strncpy(char *to, const char *from, int count)
55{
56 register char *ret = to;
57
58 while (count > 0) {
59 count--;
60 if ((*to++ = *from++) == '\0')
61 break;
62 }
63
64 while (count > 0) {
65 count--;
66 *to++ = '\0';
67 }
68 return ret;
69}
70
Uwe Hermannaac8f662010-09-29 09:54:16 +000071static inline void strcpy(char *dst, const char *src)
72{
73 while (*src)
74 *dst++ = *src++;
75}
76
Greg Watson16247822004-03-13 03:34:52 +000077static inline int strcmp(const char *s1, const char *s2)
Stefan Reinauer14e22772010-04-27 06:56:47 +000078{
Greg Watson16247822004-03-13 03:34:52 +000079 int r;
80
81 while ((r = (*s1 - *s2)) == 0 && *s1) {
82 s1++;
83 s2++;
84 }
85 return r;
Stefan Reinauer14e22772010-04-27 06:56:47 +000086}
Greg Watson16247822004-03-13 03:34:52 +000087
Stefan Reinauer36c83402009-03-01 10:16:01 +000088static inline int strncmp(const char *s1, const char *s2, int maxlen)
89{
90 int i;
91
92 for (i = 0; i < maxlen; i++) {
93 if (s1[i] != s2[i])
94 return s1[i] - s2[i];
95 }
96
97 return 0;
98}
99
Greg Watson16247822004-03-13 03:34:52 +0000100static inline int isspace(int c)
101{
102 switch (c) {
103 case ' ': case '\f': case '\n':
104 case '\r': case '\t': case '\v':
105 return 1;
106 default:
107 return 0;
108 }
109}
110
111static inline int isdigit(int c)
112{
113 return (c >= '0' && c <= '9');
114}
115
116static inline int isxdigit(int c)
117{
118 return ((c >= '0' && c <= '9') ||
119 (c >= 'a' && c <= 'f') ||
120 (c >= 'A' && c <= 'F'));
121}
122
Greg Watsonf6d05f52004-03-17 17:02:28 +0000123static inline int isupper(int c)
124{
125 return (c >= 'A' && c <= 'Z');
126}
127
Greg Watson16247822004-03-13 03:34:52 +0000128static inline int islower(int c)
129{
130 return (c >= 'a' && c <= 'z');
131}
132
133static inline int toupper(int c)
134{
135 if (islower(c))
136 c -= 'a'-'A';
137 return c;
138}
Greg Watsonf6d05f52004-03-17 17:02:28 +0000139
140static inline int tolower(int c)
141{
142 if (isupper(c))
143 c -= 'A'-'a';
144 return c;
145}
Eric Biederman8ca8d762003-04-22 19:02:15 +0000146#endif /* STRING_H */