diff --git a/libiberty/strstr.c b/libiberty/strstr.c index c6f68495a33..49209e8229f 100644 --- a/libiberty/strstr.c +++ b/libiberty/strstr.c @@ -18,18 +18,23 @@ length, the function returns @var{string}. #include -extern int memcmp (const void *, const void *, size_t); +extern char *strchr (const char *, int); +extern int strncmp (const void *, const void *, size_t); extern size_t strlen (const char *); char * strstr (const char *s1, const char *s2) { + const char *p = s1; const size_t len = strlen (s2); - while (*s1) + + if (!len) + return s1; + + for (; (p = strchr (p, *s2)) != 0; p++) { - if (!memcmp (s1, s2, len)) - return (char *)s1; - ++s1; + if (strncmp (p, s2, len) == 0) + return (char *)p; } return (0); }