Release version 0.6
[thunix.git] / lib / string.c
blob724c241a2d48622eeee674b785f662aa776699df
1 #include <stdio.h>
2 #include <string.h>
3 #include <types.h>
4 #include <malloc.h>
6 int strcmp(const char *s1, const char *s2)
8 while ((*s1 == *s2) && *s1 != '\0') {
9 s1++;
10 s2++;
13 return (*s1 - *s2);
16 int strncmp(const char *s1, const char *s2, int n)
18 while ((--n) && (*s1 == *s2) && *s1 != '\0') {
19 s1++;
20 s2++;
23 return (*s1 - *s2);
27 char *strcpy(char *dest, const char *src)
29 char *tmp = dest;
31 while ((*dest++ = *src++) != '\0')
32 /* nothing */;
33 return tmp;
37 char *strcat(char *dest, const char *src)
39 char *tmp = dest;
41 while (*dest)
42 dest++;
43 while ((*dest++ = *src++) != '\0')
45 return tmp;
49 size_t strlen(const char *s)
51 const char *sc;
53 for (sc = s; *sc; ++sc)
54 /* nothing */;
55 return sc - s;
59 char *strchr (const char *s, int c)
61 while (*s) {
62 if (*s == c)
63 return (char *) s;
64 s++;
67 return (void *)0;
70 char *strrchr (char *s, int c)
72 char *end = s + strlen(s) - 1;
74 while (*end != c && end >= s)
75 end--;
76 if (end < s)
77 return NULL;
78 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;
90 void *memset(void *s, int c, size_t count)
92 char *xs = s;
94 while (count--)
95 *xs++ = c;
96 return s;
99 void *memset_word(void *s, unsigned short word, size_t count)
101 unsigned short *xs = (unsigned short *)s;
103 while (count--)
104 *xs++ = word;
105 return s;
108 void *memcpy(void *dest, const void *src, size_t count)
110 char *tmp = dest;
111 const char *s = src;
113 while (count--)
114 *tmp++ = *s++;
115 return dest;
119 void *memmove(void *dest, const void *src, size_t count)
121 char *tmp;
122 const char *s;
124 if (dest <= src) {
125 tmp = dest;
126 s = src;
127 while (count--)
128 *tmp++ = *s++;
129 } else {
130 tmp = dest;
131 tmp += count;
132 s = src;
133 s += count;
134 while (count--)
135 *--tmp = *--s;
137 return dest;
141 int memcmp(const void *cs, const void *ct, size_t count)
143 const unsigned char *su1, *su2;
144 int res = 0;
146 for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
147 if ((res = *su1 - *su2) != 0)
148 break;
149 return res;