1 #include "libcflat.h" 2 3 unsigned long strlen(const char *buf) 4 { 5 unsigned long len = 0; 6 7 while (*buf++) 8 ++len; 9 return len; 10 } 11 12 char *strcat(char *dest, const char *src) 13 { 14 char *p = dest; 15 16 while (*p) 17 ++p; 18 while ((*p++ = *src++) != 0) 19 ; 20 return dest; 21 } 22 23 char *strcpy(char *dest, const char *src) 24 { 25 *dest = 0; 26 return strcat(dest, src); 27 } 28 29 int strcmp(const char *a, const char *b) 30 { 31 while (*a == *b) { 32 if (*a == '\0') { 33 break; 34 } 35 ++a, ++b; 36 } 37 return *a - *b; 38 } 39 40 char *strchr(const char *s, int c) 41 { 42 while (*s != (char)c) 43 if (*s++ == '\0') 44 return NULL; 45 return (char *)s; 46 } 47 48 char *strstr(const char *s1, const char *s2) 49 { 50 size_t l1, l2; 51 52 l2 = strlen(s2); 53 if (!l2) 54 return (char *)s1; 55 l1 = strlen(s1); 56 while (l1 >= l2) { 57 l1--; 58 if (!memcmp(s1, s2, l2)) 59 return (char *)s1; 60 s1++; 61 } 62 return NULL; 63 } 64 65 void *memset(void *s, int c, size_t n) 66 { 67 size_t i; 68 char *a = s; 69 70 for (i = 0; i < n; ++i) 71 a[i] = c; 72 73 return s; 74 } 75 76 void *memcpy(void *dest, const void *src, size_t n) 77 { 78 size_t i; 79 char *a = dest; 80 const char *b = src; 81 82 for (i = 0; i < n; ++i) 83 a[i] = b[i]; 84 85 return dest; 86 } 87 88 int memcmp(const void *s1, const void *s2, size_t n) 89 { 90 const unsigned char *a = s1, *b = s2; 91 int ret = 0; 92 93 while (n--) { 94 ret = *a - *b; 95 if (ret) 96 break; 97 ++a, ++b; 98 } 99 return ret; 100 } 101 102 void *memmove(void *dest, const void *src, size_t n) 103 { 104 const unsigned char *s = src; 105 unsigned char *d = dest; 106 107 if (d <= s) { 108 while (n--) 109 *d++ = *s++; 110 } else { 111 d += n, s += n; 112 while (n--) 113 *--d = *--s; 114 } 115 return dest; 116 } 117 118 void *memchr(const void *s, int c, size_t n) 119 { 120 const unsigned char *str = s, chr = (unsigned char)c; 121 122 while (n--) 123 if (*str++ == chr) 124 return (void *)(str - 1); 125 return NULL; 126 } 127 128 long atol(const char *ptr) 129 { 130 long acc = 0; 131 const char *s = ptr; 132 int neg, c; 133 134 while (*s == ' ' || *s == '\t') 135 s++; 136 if (*s == '-'){ 137 neg = 1; 138 s++; 139 } else { 140 neg = 0; 141 if (*s == '+') 142 s++; 143 } 144 145 while (*s) { 146 if (*s < '0' || *s > '9') 147 break; 148 c = *s - '0'; 149 acc = acc * 10 + c; 150 s++; 151 } 152 153 if (neg) 154 acc = -acc; 155 156 return acc; 157 } 158