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