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 void *memset(void *s, int c, size_t n) 49 { 50 size_t i; 51 char *a = s; 52 53 for (i = 0; i < n; ++i) 54 a[i] = c; 55 56 return s; 57 } 58 59 void *memcpy(void *dest, const void *src, size_t n) 60 { 61 size_t i; 62 char *a = dest; 63 const char *b = src; 64 65 for (i = 0; i < n; ++i) 66 a[i] = b[i]; 67 68 return dest; 69 } 70 71 int memcmp(const void *s1, const void *s2, size_t n) 72 { 73 const unsigned char *a = s1, *b = s2; 74 int ret = 0; 75 76 while (n--) { 77 ret = *a - *b; 78 if (ret) 79 break; 80 ++a, ++b; 81 } 82 return ret; 83 } 84 85 void *memmove(void *dest, const void *src, size_t n) 86 { 87 const unsigned char *s = src; 88 unsigned char *d = dest; 89 90 if (d <= s) { 91 while (n--) 92 *d++ = *s++; 93 } else { 94 d += n, s += n; 95 while (n--) 96 *--d = *--s; 97 } 98 return dest; 99 } 100 101 void *memchr(const void *s, int c, size_t n) 102 { 103 const unsigned char *str = s, chr = (unsigned char)c; 104 105 while (n--) 106 if (*str++ == chr) 107 return (void *)(str - 1); 108 return NULL; 109 } 110 111 long atol(const char *ptr) 112 { 113 long acc = 0; 114 const char *s = ptr; 115 int neg, c; 116 117 while (*s == ' ' || *s == '\t') 118 s++; 119 if (*s == '-'){ 120 neg = 1; 121 s++; 122 } else { 123 neg = 0; 124 if (*s == '+') 125 s++; 126 } 127 128 while (*s) { 129 if (*s < '0' || *s > '9') 130 break; 131 c = *s - '0'; 132 acc = acc * 10 + c; 133 s++; 134 } 135 136 if (neg) 137 acc = -acc; 138 139 return acc; 140 } 141