string.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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. int memcmp(const void *cs, const void *ct, size_t count)
  55. {
  56. const unsigned char *su1 = cs, *su2 = ct, *end = su1 + count;
  57. int res = 0;
  58. while (su1 < end) {
  59. res = *su1++ - *su2++;
  60. if (res)
  61. break;
  62. }
  63. return res;
  64. }
  65. int strcmp(const char *cs, const char *ct)
  66. {
  67. unsigned char c1, c2;
  68. int res = 0;
  69. do {
  70. c1 = *cs++;
  71. c2 = *ct++;
  72. res = c1 - c2;
  73. if (res)
  74. break;
  75. } while (c1);
  76. return res;
  77. }
  78. void *memchr(const void *s, int c, size_t count)
  79. {
  80. const unsigned char *p = s;
  81. while (count--)
  82. if ((unsigned char)c == *p++)
  83. return (void *)(p - 1);
  84. return NULL;
  85. }
  86. char *strchr(const char *s, int c)
  87. {
  88. while (*s != (char)c)
  89. if (*s++ == '\0')
  90. return NULL;
  91. return (char *)s;
  92. }
  93. #undef memset
  94. void *memset(void *s, int c, size_t count)
  95. {
  96. char *xs = s;
  97. while (count--)
  98. *xs++ = c;
  99. return s;
  100. }
  101. void __memzero(void *s, size_t count)
  102. {
  103. memset(s, 0, count);
  104. }