Commit d5f1fb53353edc38da326445267c1df0c9676df2

Authored by Li Zefan
Committed by Steven Rostedt
1 parent a3291c14ec

lib: Introduce strnstr()

It differs strstr() in that it limits the length to be searched
in the first string.

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
LKML-Reference: <4B4E8743.6030805@cn.fujitsu.com>
Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>

Showing 2 changed files with 30 additions and 2 deletions Side-by-side Diff

include/linux/string.h
... ... @@ -72,7 +72,10 @@
72 72 }
73 73  
74 74 #ifndef __HAVE_ARCH_STRSTR
75   -extern char * strstr(const char *,const char *);
  75 +extern char * strstr(const char *, const char *);
  76 +#endif
  77 +#ifndef __HAVE_ARCH_STRNSTR
  78 +extern char * strnstr(const char *, const char *, size_t);
76 79 #endif
77 80 #ifndef __HAVE_ARCH_STRLEN
78 81 extern __kernel_size_t strlen(const char *);
... ... @@ -667,7 +667,7 @@
667 667 */
668 668 char *strstr(const char *s1, const char *s2)
669 669 {
670   - int l1, l2;
  670 + size_t l1, l2;
671 671  
672 672 l2 = strlen(s2);
673 673 if (!l2)
... ... @@ -682,6 +682,31 @@
682 682 return NULL;
683 683 }
684 684 EXPORT_SYMBOL(strstr);
  685 +#endif
  686 +
  687 +#ifndef __HAVE_ARCH_STRNSTR
  688 +/**
  689 + * strnstr - Find the first substring in a length-limited string
  690 + * @s1: The string to be searched
  691 + * @s2: The string to search for
  692 + * @len: the maximum number of characters to search
  693 + */
  694 +char *strnstr(const char *s1, const char *s2, size_t len)
  695 +{
  696 + size_t l1 = len, l2;
  697 +
  698 + l2 = strlen(s2);
  699 + if (!l2)
  700 + return (char *)s1;
  701 + while (l1 >= l2) {
  702 + l1--;
  703 + if (!memcmp(s1, s2, l2))
  704 + return (char *)s1;
  705 + s1++;
  706 + }
  707 + return NULL;
  708 +}
  709 +EXPORT_SYMBOL(strnstr);
685 710 #endif
686 711  
687 712 #ifndef __HAVE_ARCH_MEMCHR