0
|
1 /* Simple implementation of strstr for systems without it.
|
|
2 This function is in the public domain. */
|
|
3
|
|
4 /*
|
|
5
|
|
6 @deftypefn Supplemental char* strstr (const char *@var{string}, const char *@var{sub})
|
|
7
|
|
8 This function searches for the substring @var{sub} in the string
|
|
9 @var{string}, not including the terminating null characters. A pointer
|
|
10 to the first occurrence of @var{sub} is returned, or @code{NULL} if the
|
|
11 substring is absent. If @var{sub} points to a string with zero
|
|
12 length, the function returns @var{string}.
|
|
13
|
|
14 @end deftypefn
|
|
15
|
|
16
|
|
17 */
|
|
18
|
|
19
|
|
20 /* FIXME: The above description is ANSI compiliant. This routine has not
|
|
21 been validated to comply with it. -fnf */
|
|
22
|
|
23 #include <stddef.h>
|
|
24
|
|
25 extern char *strchr (const char *, int);
|
|
26 extern int strncmp (const void *, const void *, size_t);
|
|
27 extern size_t strlen (const char *);
|
|
28
|
|
29 char *
|
|
30 strstr (const char *s1, const char *s2)
|
|
31 {
|
|
32 const char *p = s1;
|
|
33 const size_t len = strlen (s2);
|
|
34
|
|
35 for (; (p = strchr (p, *s2)) != 0; p++)
|
|
36 {
|
|
37 if (strncmp (p, s2, len) == 0)
|
|
38 return (char *)p;
|
|
39 }
|
|
40 return (0);
|
|
41 }
|