Commit d5f1fb53353edc38da326445267c1df0c9676df2
Committed by
Steven Rostedt
1 parent
a3291c14ec
Exists in
master
and in
20 other branches
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 *); |
lib/string.c
... | ... | @@ -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 |