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 strncmp(const char *a, const char *b, size_t n) 30 { 31 for (; n--; ++a, ++b) 32 if (*a != *b || *a == '\0') 33 return *a - *b; 34 35 return 0; 36 } 37 38 int strcmp(const char *a, const char *b) 39 { 40 return strncmp(a, b, SIZE_MAX); 41 } 42 43 char *strchr(const char *s, int c) 44 { 45 while (*s != (char)c) 46 if (*s++ == '\0') 47 return NULL; 48 return (char *)s; 49 } 50 51 char *strstr(const char *s1, const char *s2) 52 { 53 size_t l1, l2; 54 55 l2 = strlen(s2); 56 if (!l2) 57 return (char *)s1; 58 l1 = strlen(s1); 59 while (l1 >= l2) { 60 l1--; 61 if (!memcmp(s1, s2, l2)) 62 return (char *)s1; 63 s1++; 64 } 65 return NULL; 66 } 67 68 void *memset(void *s, int c, size_t n) 69 { 70 size_t i; 71 char *a = s; 72 73 for (i = 0; i < n; ++i) 74 a[i] = c; 75 76 return s; 77 } 78 79 void *memcpy(void *dest, const void *src, size_t n) 80 { 81 size_t i; 82 char *a = dest; 83 const char *b = src; 84 85 for (i = 0; i < n; ++i) 86 a[i] = b[i]; 87 88 return dest; 89 } 90 91 int memcmp(const void *s1, const void *s2, size_t n) 92 { 93 const unsigned char *a = s1, *b = s2; 94 int ret = 0; 95 96 while (n--) { 97 ret = *a - *b; 98 if (ret) 99 break; 100 ++a, ++b; 101 } 102 return ret; 103 } 104 105 void *memmove(void *dest, const void *src, size_t n) 106 { 107 const unsigned char *s = src; 108 unsigned char *d = dest; 109 110 if (d <= s) { 111 while (n--) 112 *d++ = *s++; 113 } else { 114 d += n, s += n; 115 while (n--) 116 *--d = *--s; 117 } 118 return dest; 119 } 120 121 void *memchr(const void *s, int c, size_t n) 122 { 123 const unsigned char *str = s, chr = (unsigned char)c; 124 125 while (n--) 126 if (*str++ == chr) 127 return (void *)(str - 1); 128 return NULL; 129 } 130 131 long atol(const char *ptr) 132 { 133 long acc = 0; 134 const char *s = ptr; 135 int neg, c; 136 137 while (*s == ' ' || *s == '\t') 138 s++; 139 if (*s == '-'){ 140 neg = 1; 141 s++; 142 } else { 143 neg = 0; 144 if (*s == '+') 145 s++; 146 } 147 148 while (*s) { 149 if (*s < '0' || *s > '9') 150 break; 151 c = *s - '0'; 152 acc = acc * 10 + c; 153 s++; 154 } 155 156 if (neg) 157 acc = -acc; 158 159 return acc; 160 } 161 162 extern char **environ; 163 164 char *getenv(const char *name) 165 { 166 char **envp = environ, *delim; 167 168 while (*envp) { 169 delim = strchr(*envp, '='); 170 if (delim && strncmp(name, *envp, delim - *envp) == 0) 171 return delim + 1; 172 ++envp; 173 } 174 return NULL; 175 } 176