diff options
Diffstat (limited to 'firmware/common')
-rw-r--r-- | firmware/common/strstr.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/firmware/common/strstr.c b/firmware/common/strstr.c new file mode 100644 index 0000000000..2f33629997 --- /dev/null +++ b/firmware/common/strstr.c | |||
@@ -0,0 +1,45 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id: $ | ||
9 | * | ||
10 | * Copyright (C) 2007 by Christian Gmeiner | ||
11 | * | ||
12 | ****************************************************************************/ | ||
13 | |||
14 | #include <string.h> | ||
15 | |||
16 | /** | ||
17 | * Locate substring. | ||
18 | * @param search c string to be scanned. | ||
19 | * @param find c string containing the sequence of characters to match. | ||
20 | * @return a pointer to the first occurrence in search of any of the | ||
21 | * entire sequence of characters specified in find, or a | ||
22 | * null pointer if the sequence is not present in search. | ||
23 | */ | ||
24 | char *strstr(const char *search, const char *find) | ||
25 | { | ||
26 | char *hend; | ||
27 | char *a, *b; | ||
28 | |||
29 | if (*find == 0) return (char*)search; | ||
30 | hend = (char *)search + strlen(search) - strlen(find) + 1; | ||
31 | while (search < hend) { | ||
32 | if (*search == *find) { | ||
33 | a = (char *)search; | ||
34 | b = (char *)find; | ||
35 | for (;;) { | ||
36 | if (*b == 0) return (char*)search; | ||
37 | if (*a++ != *b++) { | ||
38 | break; | ||
39 | } | ||
40 | } | ||
41 | } | ||
42 | search++; | ||
43 | } | ||
44 | return 0; | ||
45 | } | ||