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