summaryrefslogtreecommitdiff
path: root/firmware/common
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/common')
-rw-r--r--firmware/common/strstr.c45
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 */
24char *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}