Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
string.c
Go to the documentation of this file.
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 }