1 #include "vof.h" 2 3 int strlen(const char *s) 4 { 5 int len = 0; 6 7 while (*s != 0) { 8 len += 1; 9 s += 1; 10 } 11 12 return len; 13 } 14 15 int strcmp(const char *s1, const char *s2) 16 { 17 while (*s1 != 0 && *s2 != 0) { 18 if (*s1 != *s2) { 19 break; 20 } 21 s1 += 1; 22 s2 += 1; 23 } 24 25 return *s1 - *s2; 26 } 27 28 void *memcpy(void *dest, const void *src, size_t n) 29 { 30 char *cdest; 31 const char *csrc = src; 32 33 cdest = dest; 34 while (n-- > 0) { 35 *cdest++ = *csrc++; 36 } 37 38 return dest; 39 } 40 41 int memcmp(const void *ptr1, const void *ptr2, size_t n) 42 { 43 const unsigned char *p1 = ptr1; 44 const unsigned char *p2 = ptr2; 45 46 while (n-- > 0) { 47 if (*p1 != *p2) { 48 return *p1 - *p2; 49 } 50 p1 += 1; 51 p2 += 1; 52 } 53 54 return 0; 55 } 56 57 void *memmove(void *dest, const void *src, size_t n) 58 { 59 char *cdest; 60 const char *csrc; 61 int i; 62 63 /* Do the buffers overlap in a bad way? */ 64 if (src < dest && src + n >= dest) { 65 /* Copy from end to start */ 66 cdest = dest + n - 1; 67 csrc = src + n - 1; 68 for (i = 0; i < n; i++) { 69 *cdest-- = *csrc--; 70 } 71 } else { 72 /* Normal copy is possible */ 73 cdest = dest; 74 csrc = src; 75 for (i = 0; i < n; i++) { 76 *cdest++ = *csrc++; 77 } 78 } 79 80 return dest; 81 } 82 83 void *memset(void *dest, int c, size_t size) 84 { 85 unsigned char *d = (unsigned char *)dest; 86 87 while (size-- > 0) { 88 *d++ = (unsigned char)c; 89 } 90 91 return dest; 92 } 93