]>
Commit | Line | Data |
---|---|---|
df4879fa NP |
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 | ||
76df6980 RH |
68 | size_t strnlen(const char *s, size_t count) |
69 | { | |
70 | const char *sc; | |
71 | ||
72 | for (sc = s; count-- && *sc != '\0'; ++sc) | |
73 | /* nothing */; | |
74 | return sc - s; | |
75 | } | |
76 | ||
df4879fa NP |
77 | int memcmp(const void *cs, const void *ct, size_t count) |
78 | { | |
79 | const unsigned char *su1 = cs, *su2 = ct, *end = su1 + count; | |
80 | int res = 0; | |
81 | ||
82 | while (su1 < end) { | |
83 | res = *su1++ - *su2++; | |
84 | if (res) | |
85 | break; | |
86 | } | |
87 | return res; | |
88 | } | |
89 | ||
90 | int strcmp(const char *cs, const char *ct) | |
91 | { | |
92 | unsigned char c1, c2; | |
93 | int res = 0; | |
94 | ||
95 | do { | |
96 | c1 = *cs++; | |
97 | c2 = *ct++; | |
98 | res = c1 - c2; | |
99 | if (res) | |
100 | break; | |
101 | } while (c1); | |
102 | return res; | |
103 | } | |
104 | ||
105 | void *memchr(const void *s, int c, size_t count) | |
106 | { | |
107 | const unsigned char *p = s; | |
108 | ||
109 | while (count--) | |
110 | if ((unsigned char)c == *p++) | |
111 | return (void *)(p - 1); | |
112 | return NULL; | |
113 | } | |
114 | ||
115 | char *strchr(const char *s, int c) | |
116 | { | |
117 | while (*s != (char)c) | |
118 | if (*s++ == '\0') | |
119 | return NULL; | |
120 | return (char *)s; | |
121 | } | |
122 | ||
123 | #undef memset | |
124 | ||
125 | void *memset(void *s, int c, size_t count) | |
126 | { | |
127 | char *xs = s; | |
128 | while (count--) | |
129 | *xs++ = c; | |
130 | return s; | |
131 | } | |
132 | ||
133 | void __memzero(void *s, size_t count) | |
134 | { | |
135 | memset(s, 0, count); | |
136 | } |