From b48c42a41574a37eee9397f06c9a551931cbf9f6 Mon Sep 17 00:00:00 2001 From: Li Zefan Date: Thu, 14 Jan 2010 10:53:55 +0800 Subject: [PATCH] --- yaml --- r: 179372 b: refs/heads/master c: d5f1fb53353edc38da326445267c1df0c9676df2 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/include/linux/string.h | 5 ++++- trunk/lib/string.c | 27 ++++++++++++++++++++++++++- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index bec3eace9b96..b3eb989df243 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a3291c14ecf0a995e30d993b7f2cae031de98727 +refs/heads/master: d5f1fb53353edc38da326445267c1df0c9676df2 diff --git a/trunk/include/linux/string.h b/trunk/include/linux/string.h index 651839a2a755..a716ee2a8adb 100644 --- a/trunk/include/linux/string.h +++ b/trunk/include/linux/string.h @@ -72,7 +72,10 @@ static inline __must_check char *strstrip(char *str) } #ifndef __HAVE_ARCH_STRSTR -extern char * strstr(const char *,const char *); +extern char * strstr(const char *, const char *); +#endif +#ifndef __HAVE_ARCH_STRNSTR +extern char * strnstr(const char *, const char *, size_t); #endif #ifndef __HAVE_ARCH_STRLEN extern __kernel_size_t strlen(const char *); diff --git a/trunk/lib/string.c b/trunk/lib/string.c index 9f75b4ec50b8..a1cdcfcc42d0 100644 --- a/trunk/lib/string.c +++ b/trunk/lib/string.c @@ -667,7 +667,7 @@ EXPORT_SYMBOL(memscan); */ char *strstr(const char *s1, const char *s2) { - int l1, l2; + size_t l1, l2; l2 = strlen(s2); if (!l2) @@ -684,6 +684,31 @@ char *strstr(const char *s1, const char *s2) EXPORT_SYMBOL(strstr); #endif +#ifndef __HAVE_ARCH_STRNSTR +/** + * strnstr - Find the first substring in a length-limited string + * @s1: The string to be searched + * @s2: The string to search for + * @len: the maximum number of characters to search + */ +char *strnstr(const char *s1, const char *s2, size_t len) +{ + size_t l1 = len, l2; + + l2 = strlen(s2); + if (!l2) + return (char *)s1; + while (l1 >= l2) { + l1--; + if (!memcmp(s1, s2, l2)) + return (char *)s1; + s1++; + } + return NULL; +} +EXPORT_SYMBOL(strnstr); +#endif + #ifndef __HAVE_ARCH_MEMCHR /** * memchr - Find a character in an area of memory.