Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5f1fb53 authored by Li Zefan's avatar Li Zefan Committed by Steven Rostedt
Browse files

lib: Introduce strnstr()



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

Signed-off-by: default avatarLi Zefan <lizf@cn.fujitsu.com>
LKML-Reference: <4B4E8743.6030805@cn.fujitsu.com>
Acked-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
parent a3291c14
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -74,6 +74,9 @@ static inline __must_check char *strstrip(char *str)
#ifndef __HAVE_ARCH_STRSTR
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 *);
#endif
+26 −1
Original line number Diff line number Diff line
@@ -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.