Implement user space's printf stuff
[thunix.git] / user / string.c
blob239a9a3c1e47f09f650867c1d09181b2a55aa378
1 #include <stdio.h>
2 #include <string.h>
3 #include <types.h>
5 int strcmp(const char *s1, const char *s2)
7 while ((*s1 == *s2) && *s1 != '\0') {
8 s1++;
9 s2++;
12 return (*s1 - *s2);
15 int strncmp(const char *s1, const char *s2, int n)
17 while ((--n) && (*s1 == *s2) && *s1 != '\0') {
18 s1++;
19 s2++;
22 return (*s1 - *s2);
26 char *strcpy(char *dest, const char *src)
28 char *tmp = dest;
30 while ((*dest++ = *src++) != '\0')
31 /* nothing */;
32 return tmp;
36 char *strcat(char *dest, const char *src)
38 char *tmp = dest;
40 while (*dest)
41 dest++;
42 while ((*dest++ = *src++) != '\0')
44 return tmp;
48 size_t strlen(const char *s)
50 const char *sc;
52 for (sc = s; *sc; ++sc)
53 /* nothing */;
54 return sc - s;
58 char *strchr (const char *s, int c)
60 while (*s) {
61 if (*s == c)
62 return (char *) s;
63 s++;
66 return (void *)0;
69 char *strrchr (char *s, int c)
71 char *end = s + strlen(s) - 1;
73 while (*end != c && end >= s)
74 end--;
75 if (end < s)
76 return NULL;
77 return end;
81 char *strdup(const char *str)
83 char *s = malloc(strlen(str) + 1);
84 if (!s)
85 return s;
86 strcpy(s, str);
87 return s;
91 void *memset(void *s, int c, size_t count)
93 char *xs = s;
95 while (count--)
96 *xs++ = c;
97 return s;
100 void *memset_word(void *s, unsigned short word, size_t count)
102 unsigned short *xs = (unsigned short *)s;
104 while (count--)
105 *xs++ = word;
106 return s;
109 void *memcpy(void *dest, const void *src, size_t count)
111 char *tmp = dest;
112 const char *s = src;
114 while (count--)
115 *tmp++ = *s++;
116 return dest;
120 void *memmove(void *dest, const void *src, size_t count)
122 char *tmp;
123 const char *s;
125 if (dest <= src) {
126 tmp = dest;
127 s = src;
128 while (count--)
129 *tmp++ = *s++;
130 } else {
131 tmp = dest;
132 tmp += count;
133 s = src;
134 s += count;
135 while (count--)
136 *--tmp = *--s;
138 return dest;
142 int memcmp(const void *cs, const void *ct, size_t count)
144 const unsigned char *su1, *su2;
145 int res = 0;
147 for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
148 if ((res = *su1 - *su2) != 0)
149 break;
150 return res;