string.c 2.0 KB

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