linux/arch/arm/boot/compressed/string.c
<<
>>
Prefs
   1/*
   2 * arch/arm/boot/compressed/string.c
   3 *
   4 * Small subset of simple string routines
   5 */
   6
   7#include <linux/string.h>
   8
   9void *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
  43void *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
  59size_t strlen(const char *s)
  60{
  61        const char *sc = s;
  62
  63        while (*sc != '\0')
  64                sc++;
  65        return sc - s;
  66}
  67
  68int 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
  81int 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
  96void *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
 106char *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
 116void *memset(void *s, int c, size_t count)
 117{
 118        char *xs = s;
 119        while (count--)
 120                *xs++ = c;
 121        return s;
 122}
 123
 124void __memzero(void *s, size_t count)
 125{
 126        memset(s, 0, count);
 127}
 128