Merge tag 'kconfig-v5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy...
[sfrench/cifs-2.6.git] / lib / string.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  *  linux/lib/string.c
4  *
5  *  Copyright (C) 1991, 1992  Linus Torvalds
6  */
7
8 /*
9  * stupid library routines.. The optimized versions should generally be found
10  * as inline code in <asm-xx/string.h>
11  *
12  * These are buggy as well..
13  *
14  * * Fri Jun 25 1999, Ingo Oeser <ioe@informatik.tu-chemnitz.de>
15  * -  Added strsep() which will replace strtok() soon (because strsep() is
16  *    reentrant and should be faster). Use only strsep() in new code, please.
17  *
18  * * Sat Feb 09 2002, Jason Thomas <jason@topic.com.au>,
19  *                    Matthew Hawkins <matt@mh.dropbear.id.au>
20  * -  Kissed strtok() goodbye
21  */
22
23 #include <linux/types.h>
24 #include <linux/string.h>
25 #include <linux/ctype.h>
26 #include <linux/kernel.h>
27 #include <linux/export.h>
28 #include <linux/bug.h>
29 #include <linux/errno.h>
30 #include <linux/slab.h>
31
32 #include <asm/byteorder.h>
33 #include <asm/word-at-a-time.h>
34 #include <asm/page.h>
35
36 #ifndef __HAVE_ARCH_STRNCASECMP
37 /**
38  * strncasecmp - Case insensitive, length-limited string comparison
39  * @s1: One string
40  * @s2: The other string
41  * @len: the maximum number of characters to compare
42  */
43 int strncasecmp(const char *s1, const char *s2, size_t len)
44 {
45         /* Yes, Virginia, it had better be unsigned */
46         unsigned char c1, c2;
47
48         if (!len)
49                 return 0;
50
51         do {
52                 c1 = *s1++;
53                 c2 = *s2++;
54                 if (!c1 || !c2)
55                         break;
56                 if (c1 == c2)
57                         continue;
58                 c1 = tolower(c1);
59                 c2 = tolower(c2);
60                 if (c1 != c2)
61                         break;
62         } while (--len);
63         return (int)c1 - (int)c2;
64 }
65 EXPORT_SYMBOL(strncasecmp);
66 #endif
67
68 #ifndef __HAVE_ARCH_STRCASECMP
69 int strcasecmp(const char *s1, const char *s2)
70 {
71         int c1, c2;
72
73         do {
74                 c1 = tolower(*s1++);
75                 c2 = tolower(*s2++);
76         } while (c1 == c2 && c1 != 0);
77         return c1 - c2;
78 }
79 EXPORT_SYMBOL(strcasecmp);
80 #endif
81
82 #ifndef __HAVE_ARCH_STRCPY
83 /**
84  * strcpy - Copy a %NUL terminated string
85  * @dest: Where to copy the string to
86  * @src: Where to copy the string from
87  */
88 #undef strcpy
89 char *strcpy(char *dest, const char *src)
90 {
91         char *tmp = dest;
92
93         while ((*dest++ = *src++) != '\0')
94                 /* nothing */;
95         return tmp;
96 }
97 EXPORT_SYMBOL(strcpy);
98 #endif
99
100 #ifndef __HAVE_ARCH_STRNCPY
101 /**
102  * strncpy - Copy a length-limited, C-string
103  * @dest: Where to copy the string to
104  * @src: Where to copy the string from
105  * @count: The maximum number of bytes to copy
106  *
107  * The result is not %NUL-terminated if the source exceeds
108  * @count bytes.
109  *
110  * In the case where the length of @src is less than  that  of
111  * count, the remainder of @dest will be padded with %NUL.
112  *
113  */
114 char *strncpy(char *dest, const char *src, size_t count)
115 {
116         char *tmp = dest;
117
118         while (count) {
119                 if ((*tmp = *src) != 0)
120                         src++;
121                 tmp++;
122                 count--;
123         }
124         return dest;
125 }
126 EXPORT_SYMBOL(strncpy);
127 #endif
128
129 #ifndef __HAVE_ARCH_STRLCPY
130 /**
131  * strlcpy - Copy a C-string into a sized buffer
132  * @dest: Where to copy the string to
133  * @src: Where to copy the string from
134  * @size: size of destination buffer
135  *
136  * Compatible with ``*BSD``: the result is always a valid
137  * NUL-terminated string that fits in the buffer (unless,
138  * of course, the buffer size is zero). It does not pad
139  * out the result like strncpy() does.
140  */
141 size_t strlcpy(char *dest, const char *src, size_t size)
142 {
143         size_t ret = strlen(src);
144
145         if (size) {
146                 size_t len = (ret >= size) ? size - 1 : ret;
147                 memcpy(dest, src, len);
148                 dest[len] = '\0';
149         }
150         return ret;
151 }
152 EXPORT_SYMBOL(strlcpy);
153 #endif
154
155 #ifndef __HAVE_ARCH_STRSCPY
156 /**
157  * strscpy - Copy a C-string into a sized buffer
158  * @dest: Where to copy the string to
159  * @src: Where to copy the string from
160  * @count: Size of destination buffer
161  *
162  * Copy the string, or as much of it as fits, into the dest buffer.  The
163  * behavior is undefined if the string buffers overlap.  The destination
164  * buffer is always NUL terminated, unless it's zero-sized.
165  *
166  * Preferred to strlcpy() since the API doesn't require reading memory
167  * from the src string beyond the specified "count" bytes, and since
168  * the return value is easier to error-check than strlcpy()'s.
169  * In addition, the implementation is robust to the string changing out
170  * from underneath it, unlike the current strlcpy() implementation.
171  *
172  * Preferred to strncpy() since it always returns a valid string, and
173  * doesn't unnecessarily force the tail of the destination buffer to be
174  * zeroed.  If zeroing is desired please use strscpy_pad().
175  *
176  * Return: The number of characters copied (not including the trailing
177  *         %NUL) or -E2BIG if the destination buffer wasn't big enough.
178  */
179 ssize_t strscpy(char *dest, const char *src, size_t count)
180 {
181         const struct word_at_a_time constants = WORD_AT_A_TIME_CONSTANTS;
182         size_t max = count;
183         long res = 0;
184
185         if (count == 0)
186                 return -E2BIG;
187
188 #ifdef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
189         /*
190          * If src is unaligned, don't cross a page boundary,
191          * since we don't know if the next page is mapped.
192          */
193         if ((long)src & (sizeof(long) - 1)) {
194                 size_t limit = PAGE_SIZE - ((long)src & (PAGE_SIZE - 1));
195                 if (limit < max)
196                         max = limit;
197         }
198 #else
199         /* If src or dest is unaligned, don't do word-at-a-time. */
200         if (((long) dest | (long) src) & (sizeof(long) - 1))
201                 max = 0;
202 #endif
203
204         while (max >= sizeof(unsigned long)) {
205                 unsigned long c, data;
206
207                 c = read_word_at_a_time(src+res);
208                 if (has_zero(c, &data, &constants)) {
209                         data = prep_zero_mask(c, data, &constants);
210                         data = create_zero_mask(data);
211                         *(unsigned long *)(dest+res) = c & zero_bytemask(data);
212                         return res + find_zero(data);
213                 }
214                 *(unsigned long *)(dest+res) = c;
215                 res += sizeof(unsigned long);
216                 count -= sizeof(unsigned long);
217                 max -= sizeof(unsigned long);
218         }
219
220         while (count) {
221                 char c;
222
223                 c = src[res];
224                 dest[res] = c;
225                 if (!c)
226                         return res;
227                 res++;
228                 count--;
229         }
230
231         /* Hit buffer length without finding a NUL; force NUL-termination. */
232         if (res)
233                 dest[res-1] = '\0';
234
235         return -E2BIG;
236 }
237 EXPORT_SYMBOL(strscpy);
238 #endif
239
240 /**
241  * strscpy_pad() - Copy a C-string into a sized buffer
242  * @dest: Where to copy the string to
243  * @src: Where to copy the string from
244  * @count: Size of destination buffer
245  *
246  * Copy the string, or as much of it as fits, into the dest buffer.  The
247  * behavior is undefined if the string buffers overlap.  The destination
248  * buffer is always %NUL terminated, unless it's zero-sized.
249  *
250  * If the source string is shorter than the destination buffer, zeros
251  * the tail of the destination buffer.
252  *
253  * For full explanation of why you may want to consider using the
254  * 'strscpy' functions please see the function docstring for strscpy().
255  *
256  * Return: The number of characters copied (not including the trailing
257  *         %NUL) or -E2BIG if the destination buffer wasn't big enough.
258  */
259 ssize_t strscpy_pad(char *dest, const char *src, size_t count)
260 {
261         ssize_t written;
262
263         written = strscpy(dest, src, count);
264         if (written < 0 || written == count - 1)
265                 return written;
266
267         memset(dest + written + 1, 0, count - written - 1);
268
269         return written;
270 }
271 EXPORT_SYMBOL(strscpy_pad);
272
273 #ifndef __HAVE_ARCH_STRCAT
274 /**
275  * strcat - Append one %NUL-terminated string to another
276  * @dest: The string to be appended to
277  * @src: The string to append to it
278  */
279 #undef strcat
280 char *strcat(char *dest, const char *src)
281 {
282         char *tmp = dest;
283
284         while (*dest)
285                 dest++;
286         while ((*dest++ = *src++) != '\0')
287                 ;
288         return tmp;
289 }
290 EXPORT_SYMBOL(strcat);
291 #endif
292
293 #ifndef __HAVE_ARCH_STRNCAT
294 /**
295  * strncat - Append a length-limited, C-string to another
296  * @dest: The string to be appended to
297  * @src: The string to append to it
298  * @count: The maximum numbers of bytes to copy
299  *
300  * Note that in contrast to strncpy(), strncat() ensures the result is
301  * terminated.
302  */
303 char *strncat(char *dest, const char *src, size_t count)
304 {
305         char *tmp = dest;
306
307         if (count) {
308                 while (*dest)
309                         dest++;
310                 while ((*dest++ = *src++) != 0) {
311                         if (--count == 0) {
312                                 *dest = '\0';
313                                 break;
314                         }
315                 }
316         }
317         return tmp;
318 }
319 EXPORT_SYMBOL(strncat);
320 #endif
321
322 #ifndef __HAVE_ARCH_STRLCAT
323 /**
324  * strlcat - Append a length-limited, C-string to another
325  * @dest: The string to be appended to
326  * @src: The string to append to it
327  * @count: The size of the destination buffer.
328  */
329 size_t strlcat(char *dest, const char *src, size_t count)
330 {
331         size_t dsize = strlen(dest);
332         size_t len = strlen(src);
333         size_t res = dsize + len;
334
335         /* This would be a bug */
336         BUG_ON(dsize >= count);
337
338         dest += dsize;
339         count -= dsize;
340         if (len >= count)
341                 len = count-1;
342         memcpy(dest, src, len);
343         dest[len] = 0;
344         return res;
345 }
346 EXPORT_SYMBOL(strlcat);
347 #endif
348
349 #ifndef __HAVE_ARCH_STRCMP
350 /**
351  * strcmp - Compare two strings
352  * @cs: One string
353  * @ct: Another string
354  */
355 #undef strcmp
356 int strcmp(const char *cs, const char *ct)
357 {
358         unsigned char c1, c2;
359
360         while (1) {
361                 c1 = *cs++;
362                 c2 = *ct++;
363                 if (c1 != c2)
364                         return c1 < c2 ? -1 : 1;
365                 if (!c1)
366                         break;
367         }
368         return 0;
369 }
370 EXPORT_SYMBOL(strcmp);
371 #endif
372
373 #ifndef __HAVE_ARCH_STRNCMP
374 /**
375  * strncmp - Compare two length-limited strings
376  * @cs: One string
377  * @ct: Another string
378  * @count: The maximum number of bytes to compare
379  */
380 int strncmp(const char *cs, const char *ct, size_t count)
381 {
382         unsigned char c1, c2;
383
384         while (count) {
385                 c1 = *cs++;
386                 c2 = *ct++;
387                 if (c1 != c2)
388                         return c1 < c2 ? -1 : 1;
389                 if (!c1)
390                         break;
391                 count--;
392         }
393         return 0;
394 }
395 EXPORT_SYMBOL(strncmp);
396 #endif
397
398 #ifndef __HAVE_ARCH_STRCHR
399 /**
400  * strchr - Find the first occurrence of a character in a string
401  * @s: The string to be searched
402  * @c: The character to search for
403  */
404 char *strchr(const char *s, int c)
405 {
406         for (; *s != (char)c; ++s)
407                 if (*s == '\0')
408                         return NULL;
409         return (char *)s;
410 }
411 EXPORT_SYMBOL(strchr);
412 #endif
413
414 #ifndef __HAVE_ARCH_STRCHRNUL
415 /**
416  * strchrnul - Find and return a character in a string, or end of string
417  * @s: The string to be searched
418  * @c: The character to search for
419  *
420  * Returns pointer to first occurrence of 'c' in s. If c is not found, then
421  * return a pointer to the null byte at the end of s.
422  */
423 char *strchrnul(const char *s, int c)
424 {
425         while (*s && *s != (char)c)
426                 s++;
427         return (char *)s;
428 }
429 EXPORT_SYMBOL(strchrnul);
430 #endif
431
432 #ifndef __HAVE_ARCH_STRRCHR
433 /**
434  * strrchr - Find the last occurrence of a character in a string
435  * @s: The string to be searched
436  * @c: The character to search for
437  */
438 char *strrchr(const char *s, int c)
439 {
440         const char *last = NULL;
441         do {
442                 if (*s == (char)c)
443                         last = s;
444         } while (*s++);
445         return (char *)last;
446 }
447 EXPORT_SYMBOL(strrchr);
448 #endif
449
450 #ifndef __HAVE_ARCH_STRNCHR
451 /**
452  * strnchr - Find a character in a length limited string
453  * @s: The string to be searched
454  * @count: The number of characters to be searched
455  * @c: The character to search for
456  */
457 char *strnchr(const char *s, size_t count, int c)
458 {
459         for (; count-- && *s != '\0'; ++s)
460                 if (*s == (char)c)
461                         return (char *)s;
462         return NULL;
463 }
464 EXPORT_SYMBOL(strnchr);
465 #endif
466
467 /**
468  * skip_spaces - Removes leading whitespace from @str.
469  * @str: The string to be stripped.
470  *
471  * Returns a pointer to the first non-whitespace character in @str.
472  */
473 char *skip_spaces(const char *str)
474 {
475         while (isspace(*str))
476                 ++str;
477         return (char *)str;
478 }
479 EXPORT_SYMBOL(skip_spaces);
480
481 /**
482  * strim - Removes leading and trailing whitespace from @s.
483  * @s: The string to be stripped.
484  *
485  * Note that the first trailing whitespace is replaced with a %NUL-terminator
486  * in the given string @s. Returns a pointer to the first non-whitespace
487  * character in @s.
488  */
489 char *strim(char *s)
490 {
491         size_t size;
492         char *end;
493
494         size = strlen(s);
495         if (!size)
496                 return s;
497
498         end = s + size - 1;
499         while (end >= s && isspace(*end))
500                 end--;
501         *(end + 1) = '\0';
502
503         return skip_spaces(s);
504 }
505 EXPORT_SYMBOL(strim);
506
507 #ifndef __HAVE_ARCH_STRLEN
508 /**
509  * strlen - Find the length of a string
510  * @s: The string to be sized
511  */
512 size_t strlen(const char *s)
513 {
514         const char *sc;
515
516         for (sc = s; *sc != '\0'; ++sc)
517                 /* nothing */;
518         return sc - s;
519 }
520 EXPORT_SYMBOL(strlen);
521 #endif
522
523 #ifndef __HAVE_ARCH_STRNLEN
524 /**
525  * strnlen - Find the length of a length-limited string
526  * @s: The string to be sized
527  * @count: The maximum number of bytes to search
528  */
529 size_t strnlen(const char *s, size_t count)
530 {
531         const char *sc;
532
533         for (sc = s; count-- && *sc != '\0'; ++sc)
534                 /* nothing */;
535         return sc - s;
536 }
537 EXPORT_SYMBOL(strnlen);
538 #endif
539
540 #ifndef __HAVE_ARCH_STRSPN
541 /**
542  * strspn - Calculate the length of the initial substring of @s which only contain letters in @accept
543  * @s: The string to be searched
544  * @accept: The string to search for
545  */
546 size_t strspn(const char *s, const char *accept)
547 {
548         const char *p;
549         const char *a;
550         size_t count = 0;
551
552         for (p = s; *p != '\0'; ++p) {
553                 for (a = accept; *a != '\0'; ++a) {
554                         if (*p == *a)
555                                 break;
556                 }
557                 if (*a == '\0')
558                         return count;
559                 ++count;
560         }
561         return count;
562 }
563
564 EXPORT_SYMBOL(strspn);
565 #endif
566
567 #ifndef __HAVE_ARCH_STRCSPN
568 /**
569  * strcspn - Calculate the length of the initial substring of @s which does not contain letters in @reject
570  * @s: The string to be searched
571  * @reject: The string to avoid
572  */
573 size_t strcspn(const char *s, const char *reject)
574 {
575         const char *p;
576         const char *r;
577         size_t count = 0;
578
579         for (p = s; *p != '\0'; ++p) {
580                 for (r = reject; *r != '\0'; ++r) {
581                         if (*p == *r)
582                                 return count;
583                 }
584                 ++count;
585         }
586         return count;
587 }
588 EXPORT_SYMBOL(strcspn);
589 #endif
590
591 #ifndef __HAVE_ARCH_STRPBRK
592 /**
593  * strpbrk - Find the first occurrence of a set of characters
594  * @cs: The string to be searched
595  * @ct: The characters to search for
596  */
597 char *strpbrk(const char *cs, const char *ct)
598 {
599         const char *sc1, *sc2;
600
601         for (sc1 = cs; *sc1 != '\0'; ++sc1) {
602                 for (sc2 = ct; *sc2 != '\0'; ++sc2) {
603                         if (*sc1 == *sc2)
604                                 return (char *)sc1;
605                 }
606         }
607         return NULL;
608 }
609 EXPORT_SYMBOL(strpbrk);
610 #endif
611
612 #ifndef __HAVE_ARCH_STRSEP
613 /**
614  * strsep - Split a string into tokens
615  * @s: The string to be searched
616  * @ct: The characters to search for
617  *
618  * strsep() updates @s to point after the token, ready for the next call.
619  *
620  * It returns empty tokens, too, behaving exactly like the libc function
621  * of that name. In fact, it was stolen from glibc2 and de-fancy-fied.
622  * Same semantics, slimmer shape. ;)
623  */
624 char *strsep(char **s, const char *ct)
625 {
626         char *sbegin = *s;
627         char *end;
628
629         if (sbegin == NULL)
630                 return NULL;
631
632         end = strpbrk(sbegin, ct);
633         if (end)
634                 *end++ = '\0';
635         *s = end;
636         return sbegin;
637 }
638 EXPORT_SYMBOL(strsep);
639 #endif
640
641 /**
642  * sysfs_streq - return true if strings are equal, modulo trailing newline
643  * @s1: one string
644  * @s2: another string
645  *
646  * This routine returns true iff two strings are equal, treating both
647  * NUL and newline-then-NUL as equivalent string terminations.  It's
648  * geared for use with sysfs input strings, which generally terminate
649  * with newlines but are compared against values without newlines.
650  */
651 bool sysfs_streq(const char *s1, const char *s2)
652 {
653         while (*s1 && *s1 == *s2) {
654                 s1++;
655                 s2++;
656         }
657
658         if (*s1 == *s2)
659                 return true;
660         if (!*s1 && *s2 == '\n' && !s2[1])
661                 return true;
662         if (*s1 == '\n' && !s1[1] && !*s2)
663                 return true;
664         return false;
665 }
666 EXPORT_SYMBOL(sysfs_streq);
667
668 /**
669  * match_string - matches given string in an array
670  * @array:      array of strings
671  * @n:          number of strings in the array or -1 for NULL terminated arrays
672  * @string:     string to match with
673  *
674  * Return:
675  * index of a @string in the @array if matches, or %-EINVAL otherwise.
676  */
677 int match_string(const char * const *array, size_t n, const char *string)
678 {
679         int index;
680         const char *item;
681
682         for (index = 0; index < n; index++) {
683                 item = array[index];
684                 if (!item)
685                         break;
686                 if (!strcmp(item, string))
687                         return index;
688         }
689
690         return -EINVAL;
691 }
692 EXPORT_SYMBOL(match_string);
693
694 /**
695  * __sysfs_match_string - matches given string in an array
696  * @array: array of strings
697  * @n: number of strings in the array or -1 for NULL terminated arrays
698  * @str: string to match with
699  *
700  * Returns index of @str in the @array or -EINVAL, just like match_string().
701  * Uses sysfs_streq instead of strcmp for matching.
702  */
703 int __sysfs_match_string(const char * const *array, size_t n, const char *str)
704 {
705         const char *item;
706         int index;
707
708         for (index = 0; index < n; index++) {
709                 item = array[index];
710                 if (!item)
711                         break;
712                 if (sysfs_streq(item, str))
713                         return index;
714         }
715
716         return -EINVAL;
717 }
718 EXPORT_SYMBOL(__sysfs_match_string);
719
720 #ifndef __HAVE_ARCH_MEMSET
721 /**
722  * memset - Fill a region of memory with the given value
723  * @s: Pointer to the start of the area.
724  * @c: The byte to fill the area with
725  * @count: The size of the area.
726  *
727  * Do not use memset() to access IO space, use memset_io() instead.
728  */
729 void *memset(void *s, int c, size_t count)
730 {
731         char *xs = s;
732
733         while (count--)
734                 *xs++ = c;
735         return s;
736 }
737 EXPORT_SYMBOL(memset);
738 #endif
739
740 /**
741  * memzero_explicit - Fill a region of memory (e.g. sensitive
742  *                    keying data) with 0s.
743  * @s: Pointer to the start of the area.
744  * @count: The size of the area.
745  *
746  * Note: usually using memset() is just fine (!), but in cases
747  * where clearing out _local_ data at the end of a scope is
748  * necessary, memzero_explicit() should be used instead in
749  * order to prevent the compiler from optimising away zeroing.
750  *
751  * memzero_explicit() doesn't need an arch-specific version as
752  * it just invokes the one of memset() implicitly.
753  */
754 void memzero_explicit(void *s, size_t count)
755 {
756         memset(s, 0, count);
757         barrier_data(s);
758 }
759 EXPORT_SYMBOL(memzero_explicit);
760
761 #ifndef __HAVE_ARCH_MEMSET16
762 /**
763  * memset16() - Fill a memory area with a uint16_t
764  * @s: Pointer to the start of the area.
765  * @v: The value to fill the area with
766  * @count: The number of values to store
767  *
768  * Differs from memset() in that it fills with a uint16_t instead
769  * of a byte.  Remember that @count is the number of uint16_ts to
770  * store, not the number of bytes.
771  */
772 void *memset16(uint16_t *s, uint16_t v, size_t count)
773 {
774         uint16_t *xs = s;
775
776         while (count--)
777                 *xs++ = v;
778         return s;
779 }
780 EXPORT_SYMBOL(memset16);
781 #endif
782
783 #ifndef __HAVE_ARCH_MEMSET32
784 /**
785  * memset32() - Fill a memory area with a uint32_t
786  * @s: Pointer to the start of the area.
787  * @v: The value to fill the area with
788  * @count: The number of values to store
789  *
790  * Differs from memset() in that it fills with a uint32_t instead
791  * of a byte.  Remember that @count is the number of uint32_ts to
792  * store, not the number of bytes.
793  */
794 void *memset32(uint32_t *s, uint32_t v, size_t count)
795 {
796         uint32_t *xs = s;
797
798         while (count--)
799                 *xs++ = v;
800         return s;
801 }
802 EXPORT_SYMBOL(memset32);
803 #endif
804
805 #ifndef __HAVE_ARCH_MEMSET64
806 /**
807  * memset64() - Fill a memory area with a uint64_t
808  * @s: Pointer to the start of the area.
809  * @v: The value to fill the area with
810  * @count: The number of values to store
811  *
812  * Differs from memset() in that it fills with a uint64_t instead
813  * of a byte.  Remember that @count is the number of uint64_ts to
814  * store, not the number of bytes.
815  */
816 void *memset64(uint64_t *s, uint64_t v, size_t count)
817 {
818         uint64_t *xs = s;
819
820         while (count--)
821                 *xs++ = v;
822         return s;
823 }
824 EXPORT_SYMBOL(memset64);
825 #endif
826
827 #ifndef __HAVE_ARCH_MEMCPY
828 /**
829  * memcpy - Copy one area of memory to another
830  * @dest: Where to copy to
831  * @src: Where to copy from
832  * @count: The size of the area.
833  *
834  * You should not use this function to access IO space, use memcpy_toio()
835  * or memcpy_fromio() instead.
836  */
837 void *memcpy(void *dest, const void *src, size_t count)
838 {
839         char *tmp = dest;
840         const char *s = src;
841
842         while (count--)
843                 *tmp++ = *s++;
844         return dest;
845 }
846 EXPORT_SYMBOL(memcpy);
847 #endif
848
849 #ifndef __HAVE_ARCH_MEMMOVE
850 /**
851  * memmove - Copy one area of memory to another
852  * @dest: Where to copy to
853  * @src: Where to copy from
854  * @count: The size of the area.
855  *
856  * Unlike memcpy(), memmove() copes with overlapping areas.
857  */
858 void *memmove(void *dest, const void *src, size_t count)
859 {
860         char *tmp;
861         const char *s;
862
863         if (dest <= src) {
864                 tmp = dest;
865                 s = src;
866                 while (count--)
867                         *tmp++ = *s++;
868         } else {
869                 tmp = dest;
870                 tmp += count;
871                 s = src;
872                 s += count;
873                 while (count--)
874                         *--tmp = *--s;
875         }
876         return dest;
877 }
878 EXPORT_SYMBOL(memmove);
879 #endif
880
881 #ifndef __HAVE_ARCH_MEMCMP
882 /**
883  * memcmp - Compare two areas of memory
884  * @cs: One area of memory
885  * @ct: Another area of memory
886  * @count: The size of the area.
887  */
888 #undef memcmp
889 __visible int memcmp(const void *cs, const void *ct, size_t count)
890 {
891         const unsigned char *su1, *su2;
892         int res = 0;
893
894         for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
895                 if ((res = *su1 - *su2) != 0)
896                         break;
897         return res;
898 }
899 EXPORT_SYMBOL(memcmp);
900 #endif
901
902 #ifndef __HAVE_ARCH_BCMP
903 /**
904  * bcmp - returns 0 if and only if the buffers have identical contents.
905  * @a: pointer to first buffer.
906  * @b: pointer to second buffer.
907  * @len: size of buffers.
908  *
909  * The sign or magnitude of a non-zero return value has no particular
910  * meaning, and architectures may implement their own more efficient bcmp(). So
911  * while this particular implementation is a simple (tail) call to memcmp, do
912  * not rely on anything but whether the return value is zero or non-zero.
913  */
914 #undef bcmp
915 int bcmp(const void *a, const void *b, size_t len)
916 {
917         return memcmp(a, b, len);
918 }
919 EXPORT_SYMBOL(bcmp);
920 #endif
921
922 #ifndef __HAVE_ARCH_MEMSCAN
923 /**
924  * memscan - Find a character in an area of memory.
925  * @addr: The memory area
926  * @c: The byte to search for
927  * @size: The size of the area.
928  *
929  * returns the address of the first occurrence of @c, or 1 byte past
930  * the area if @c is not found
931  */
932 void *memscan(void *addr, int c, size_t size)
933 {
934         unsigned char *p = addr;
935
936         while (size) {
937                 if (*p == c)
938                         return (void *)p;
939                 p++;
940                 size--;
941         }
942         return (void *)p;
943 }
944 EXPORT_SYMBOL(memscan);
945 #endif
946
947 #ifndef __HAVE_ARCH_STRSTR
948 /**
949  * strstr - Find the first substring in a %NUL terminated string
950  * @s1: The string to be searched
951  * @s2: The string to search for
952  */
953 char *strstr(const char *s1, const char *s2)
954 {
955         size_t l1, l2;
956
957         l2 = strlen(s2);
958         if (!l2)
959                 return (char *)s1;
960         l1 = strlen(s1);
961         while (l1 >= l2) {
962                 l1--;
963                 if (!memcmp(s1, s2, l2))
964                         return (char *)s1;
965                 s1++;
966         }
967         return NULL;
968 }
969 EXPORT_SYMBOL(strstr);
970 #endif
971
972 #ifndef __HAVE_ARCH_STRNSTR
973 /**
974  * strnstr - Find the first substring in a length-limited string
975  * @s1: The string to be searched
976  * @s2: The string to search for
977  * @len: the maximum number of characters to search
978  */
979 char *strnstr(const char *s1, const char *s2, size_t len)
980 {
981         size_t l2;
982
983         l2 = strlen(s2);
984         if (!l2)
985                 return (char *)s1;
986         while (len >= l2) {
987                 len--;
988                 if (!memcmp(s1, s2, l2))
989                         return (char *)s1;
990                 s1++;
991         }
992         return NULL;
993 }
994 EXPORT_SYMBOL(strnstr);
995 #endif
996
997 #ifndef __HAVE_ARCH_MEMCHR
998 /**
999  * memchr - Find a character in an area of memory.
1000  * @s: The memory area
1001  * @c: The byte to search for
1002  * @n: The size of the area.
1003  *
1004  * returns the address of the first occurrence of @c, or %NULL
1005  * if @c is not found
1006  */
1007 void *memchr(const void *s, int c, size_t n)
1008 {
1009         const unsigned char *p = s;
1010         while (n-- != 0) {
1011                 if ((unsigned char)c == *p++) {
1012                         return (void *)(p - 1);
1013                 }
1014         }
1015         return NULL;
1016 }
1017 EXPORT_SYMBOL(memchr);
1018 #endif
1019
1020 static void *check_bytes8(const u8 *start, u8 value, unsigned int bytes)
1021 {
1022         while (bytes) {
1023                 if (*start != value)
1024                         return (void *)start;
1025                 start++;
1026                 bytes--;
1027         }
1028         return NULL;
1029 }
1030
1031 /**
1032  * memchr_inv - Find an unmatching character in an area of memory.
1033  * @start: The memory area
1034  * @c: Find a character other than c
1035  * @bytes: The size of the area.
1036  *
1037  * returns the address of the first character other than @c, or %NULL
1038  * if the whole buffer contains just @c.
1039  */
1040 void *memchr_inv(const void *start, int c, size_t bytes)
1041 {
1042         u8 value = c;
1043         u64 value64;
1044         unsigned int words, prefix;
1045
1046         if (bytes <= 16)
1047                 return check_bytes8(start, value, bytes);
1048
1049         value64 = value;
1050 #if defined(CONFIG_ARCH_HAS_FAST_MULTIPLIER) && BITS_PER_LONG == 64
1051         value64 *= 0x0101010101010101ULL;
1052 #elif defined(CONFIG_ARCH_HAS_FAST_MULTIPLIER)
1053         value64 *= 0x01010101;
1054         value64 |= value64 << 32;
1055 #else
1056         value64 |= value64 << 8;
1057         value64 |= value64 << 16;
1058         value64 |= value64 << 32;
1059 #endif
1060
1061         prefix = (unsigned long)start % 8;
1062         if (prefix) {
1063                 u8 *r;
1064
1065                 prefix = 8 - prefix;
1066                 r = check_bytes8(start, value, prefix);
1067                 if (r)
1068                         return r;
1069                 start += prefix;
1070                 bytes -= prefix;
1071         }
1072
1073         words = bytes / 8;
1074
1075         while (words) {
1076                 if (*(u64 *)start != value64)
1077                         return check_bytes8(start, value, 8);
1078                 start += 8;
1079                 words--;
1080         }
1081
1082         return check_bytes8(start, value, bytes % 8);
1083 }
1084 EXPORT_SYMBOL(memchr_inv);
1085
1086 /**
1087  * strreplace - Replace all occurrences of character in string.
1088  * @s: The string to operate on.
1089  * @old: The character being replaced.
1090  * @new: The character @old is replaced with.
1091  *
1092  * Returns pointer to the nul byte at the end of @s.
1093  */
1094 char *strreplace(char *s, char old, char new)
1095 {
1096         for (; *s; ++s)
1097                 if (*s == old)
1098                         *s = new;
1099         return s;
1100 }
1101 EXPORT_SYMBOL(strreplace);
1102
1103 void fortify_panic(const char *name)
1104 {
1105         pr_emerg("detected buffer overflow in %s\n", name);
1106         BUG();
1107 }
1108 EXPORT_SYMBOL(fortify_panic);