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
  68size_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
  77int 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
  90int 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
 105void *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
 115char *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
 125void *memset(void *s, int c, size_t count)
 126{
 127        char *xs = s;
 128        while (count--)
 129                *xs++ = c;
 130        return s;
 131}
 132
 133void __memzero(void *s, size_t count)
 134{
 135        memset(s, 0, count);
 136}
 137