5 void *memset(void *dest, int val, size_t num)
7 unsigned char *p = dest;
9 while(num--) *p++ = val;
14 void *memset16(void *dest, int val, size_t num)
18 while(num--) *p++ = val;
23 void *memcpy(void *dest, void *src, size_t num)
25 unsigned char *d = dest;
26 unsigned char *s = src;
28 while(num--) *d++ = *s++;
33 void *memmove(void *dest, const void *src, size_t n)
48 dptr = (char*)dest + n - 1;
49 sptr = (const char*)src + n - 1;
58 int memcmp(void *aptr, void *bptr, size_t n)
60 int i, startoffs, diff;
62 unsigned char *a = aptr;
63 unsigned char *b = bptr;
65 a32 = (uint32_t*)((intptr_t)(a + 3) & 0xfffffffc);
66 b32 = (uint32_t*)((intptr_t)(b + 3) & 0xfffffffc);
68 /* if both are aligned the same way... */
69 if((startoffs = (unsigned char*)a32 - a) == (unsigned char*)b32 - b) {
70 /* catch-up to the 32bit alignment */
71 for(i=0; i<startoffs; i++) {
72 if((diff = *a++ - *b++) != 0 || --n <= 0) {
77 /* compare 32bit at once */
79 if(*a32 != *b32) break;
85 /* update byte pointers to contine with the tail */
86 a = (unsigned char*)a32;
87 b = (unsigned char*)b32;
90 /* we're here both for the tail-end of same-alignment buffers, or for the
91 * whole length of mis-aligned buffers.
94 if((diff = *a++ - *b++) != 0) {
101 size_t strlen(const char *s)
108 char *strchr(const char *s, int c)
119 char *strrchr(const char *s, int c)
126 /* go back checking for c */
135 char *strstr(const char *str, const char *substr)
138 const char *s1 = str;
139 const char *s2 = substr;
141 while(*s1 && *s1 == *s2) {
153 char *strcasestr(const char *str, const char *substr)
156 const char *s1 = str;
157 const char *s2 = substr;
159 while(*s1 && tolower(*s1) == tolower(*s2)) {
171 int strcmp(const char *s1, const char *s2)
173 while(*s1 && *s1 == *s2) {
180 int strcasecmp(const char *s1, const char *s2)
182 while(*s1 && tolower(*s1) == tolower(*s2)) {
186 return tolower(*s1) - tolower(*s2);
189 int strncmp(const char *s1, const char *s2, int n)
193 while(n-- > 0 && *s1 && *s2 && *s1 == *s2) {
202 int strncasecmp(const char *s1, const char *s2, int n)
206 while(n-- > 0 && *s1 && *s2 && tolower(*s1) == tolower(*s2)) {
212 return tolower(*s1) - tolower(*s2);
215 char *strcpy(char *dest, const char *src)
218 while((*dptr++ = *src++));
222 char *strcat(char *dest, const char *src)
224 strcpy(dest + strlen(dest), src);
228 char *strncpy(char *dest, const char *src, int n)
231 while(n-- > 0 && (*dptr++ = *src++));