1208615Sraj/* Simple implementation of strstr for systems without it.
2208615Sraj   This function is in the public domain.  */
3208615Sraj
4208615Sraj/*
5208615Sraj
6208615Sraj@deftypefn Supplemental char* strstr (const char *@var{string}, const char *@var{sub})
7208615Sraj
8208615SrajThis function searches for the substring @var{sub} in the string
9208615Sraj@var{string}, not including the terminating null characters.  A pointer
10208615Srajto the first occurrence of @var{sub} is returned, or @code{NULL} if the
11208615Srajsubstring is absent.  If @var{sub} points to a string with zero
12208615Srajlength, the function returns @var{string}.
13208615Sraj
14208615Sraj@end deftypefn
15208615Sraj
16208615Sraj
17208615Sraj*/
18208615Sraj
19208615Sraj#include <stddef.h>
20208615Sraj
21208615Srajextern char *strchr (const char *, int);
22208615Srajextern int strncmp (const void *, const void *, size_t);
23208615Srajextern size_t strlen (const char *);
24208615Sraj
25208615Srajchar *
26208615Srajstrstr (const char *s1, const char *s2)
27208615Sraj{
28208615Sraj  const char *p = s1;
29208615Sraj  const size_t len = strlen (s2);
30208615Sraj
31208615Sraj  if (!len)
32208615Sraj    return s1;
33208615Sraj
34208615Sraj  for (; (p = strchr (p, *s2)) != 0; p++)
35208615Sraj    {
36208615Sraj      if (strncmp (p, s2, len) == 0)
37208615Sraj	return (char *)p;
38208615Sraj    }
39208615Sraj  return (0);
40208615Sraj}
41208615Sraj