1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
2e8f3010fSArd Biesheuvel /*
3e8f3010fSArd Biesheuvel  * Taken from:
4e8f3010fSArd Biesheuvel  *  linux/lib/string.c
5e8f3010fSArd Biesheuvel  *
6e8f3010fSArd Biesheuvel  *  Copyright (C) 1991, 1992  Linus Torvalds
7e8f3010fSArd Biesheuvel  */
8e8f3010fSArd Biesheuvel 
9e8f3010fSArd Biesheuvel #include <linux/types.h>
10e8f3010fSArd Biesheuvel #include <linux/string.h>
11e8f3010fSArd Biesheuvel 
12e8f3010fSArd Biesheuvel #ifndef __HAVE_ARCH_STRSTR
13e8f3010fSArd Biesheuvel /**
14e8f3010fSArd Biesheuvel  * strstr - Find the first substring in a %NUL terminated string
15e8f3010fSArd Biesheuvel  * @s1: The string to be searched
16e8f3010fSArd Biesheuvel  * @s2: The string to search for
17e8f3010fSArd Biesheuvel  */
18e8f3010fSArd Biesheuvel char *strstr(const char *s1, const char *s2)
19e8f3010fSArd Biesheuvel {
20e8f3010fSArd Biesheuvel 	size_t l1, l2;
21e8f3010fSArd Biesheuvel 
22e8f3010fSArd Biesheuvel 	l2 = strlen(s2);
23e8f3010fSArd Biesheuvel 	if (!l2)
24e8f3010fSArd Biesheuvel 		return (char *)s1;
25e8f3010fSArd Biesheuvel 	l1 = strlen(s1);
26e8f3010fSArd Biesheuvel 	while (l1 >= l2) {
27e8f3010fSArd Biesheuvel 		l1--;
28e8f3010fSArd Biesheuvel 		if (!memcmp(s1, s2, l2))
29e8f3010fSArd Biesheuvel 			return (char *)s1;
30e8f3010fSArd Biesheuvel 		s1++;
31e8f3010fSArd Biesheuvel 	}
32e8f3010fSArd Biesheuvel 	return NULL;
33e8f3010fSArd Biesheuvel }
34e8f3010fSArd Biesheuvel #endif
35e8f3010fSArd Biesheuvel 
36e8f3010fSArd Biesheuvel #ifndef __HAVE_ARCH_STRNCMP
37e8f3010fSArd Biesheuvel /**
38e8f3010fSArd Biesheuvel  * strncmp - Compare two length-limited strings
39e8f3010fSArd Biesheuvel  * @cs: One string
40e8f3010fSArd Biesheuvel  * @ct: Another string
41e8f3010fSArd Biesheuvel  * @count: The maximum number of bytes to compare
42e8f3010fSArd Biesheuvel  */
43e8f3010fSArd Biesheuvel int strncmp(const char *cs, const char *ct, size_t count)
44e8f3010fSArd Biesheuvel {
45e8f3010fSArd Biesheuvel 	unsigned char c1, c2;
46e8f3010fSArd Biesheuvel 
47e8f3010fSArd Biesheuvel 	while (count) {
48e8f3010fSArd Biesheuvel 		c1 = *cs++;
49e8f3010fSArd Biesheuvel 		c2 = *ct++;
50e8f3010fSArd Biesheuvel 		if (c1 != c2)
51e8f3010fSArd Biesheuvel 			return c1 < c2 ? -1 : 1;
52e8f3010fSArd Biesheuvel 		if (!c1)
53e8f3010fSArd Biesheuvel 			break;
54e8f3010fSArd Biesheuvel 		count--;
55e8f3010fSArd Biesheuvel 	}
56e8f3010fSArd Biesheuvel 	return 0;
57e8f3010fSArd Biesheuvel }
58e8f3010fSArd Biesheuvel #endif
59