1 /* 2 * arch/arm/boot/compressed/string.c 3 * 4 * Small subset of simple string routines 5 */ 6 7 #include <linux/string.h> 8 9 void *memcpy(void *__dest, __const void *__src, size_t __n) 10 { 11 int i = 0; 12 unsigned char *d = (unsigned char *)__dest, *s = (unsigned char *)__src; 13 14 for (i = __n >> 3; i > 0; i--) { 15 *d++ = *s++; 16 *d++ = *s++; 17 *d++ = *s++; 18 *d++ = *s++; 19 *d++ = *s++; 20 *d++ = *s++; 21 *d++ = *s++; 22 *d++ = *s++; 23 } 24 25 if (__n & 1 << 2) { 26 *d++ = *s++; 27 *d++ = *s++; 28 *d++ = *s++; 29 *d++ = *s++; 30 } 31 32 if (__n & 1 << 1) { 33 *d++ = *s++; 34 *d++ = *s++; 35 } 36 37 if (__n & 1) 38 *d++ = *s++; 39 40 return __dest; 41 } 42 43 void *memmove(void *__dest, __const void *__src, size_t count) 44 { 45 unsigned char *d = __dest; 46 const unsigned char *s = __src; 47 48 if (__dest == __src) 49 return __dest; 50 51 if (__dest < __src) 52 return memcpy(__dest, __src, count); 53 54 while (count--) 55 d[count] = s[count]; 56 return __dest; 57 } 58 59 size_t strlen(const char *s) 60 { 61 const char *sc = s; 62 63 while (*sc != '\0') 64 sc++; 65 return sc - s; 66 } 67 68 int memcmp(const void *cs, const void *ct, size_t count) 69 { 70 const unsigned char *su1 = cs, *su2 = ct, *end = su1 + count; 71 int res = 0; 72 73 while (su1 < end) { 74 res = *su1++ - *su2++; 75 if (res) 76 break; 77 } 78 return res; 79 } 80 81 int strcmp(const char *cs, const char *ct) 82 { 83 unsigned char c1, c2; 84 int res = 0; 85 86 do { 87 c1 = *cs++; 88 c2 = *ct++; 89 res = c1 - c2; 90 if (res) 91 break; 92 } while (c1); 93 return res; 94 } 95 96 void *memchr(const void *s, int c, size_t count) 97 { 98 const unsigned char *p = s; 99 100 while (count--) 101 if ((unsigned char)c == *p++) 102 return (void *)(p - 1); 103 return NULL; 104 } 105 106 char *strchr(const char *s, int c) 107 { 108 while (*s != (char)c) 109 if (*s++ == '\0') 110 return NULL; 111 return (char *)s; 112 } 113 114 #undef memset 115 116 void *memset(void *s, int c, size_t count) 117 { 118 char *xs = s; 119 while (count--) 120 *xs++ = c; 121 return s; 122 } 123 124 void __memzero(void *s, size_t count) 125 { 126 memset(s, 0, count); 127 } 128