Commit 61bded1d authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

added Curl_strcasestr() for case insensitive strstr() searching

parent 4b393737
Loading
Loading
Loading
Loading
+25 −6
Original line number Diff line number Diff line
@@ -78,6 +78,25 @@ int curl_strnequal(const char *first, const char *second, size_t max)
#endif
}

/*
 * Curl_strcasestr() finds the first occurrence of the substring needle in the
 * string haystack.  The terminating `\0' characters are not compared. The
 * matching is done CASE INSENSITIVE, which thus is the difference between
 * this and strstr().
 */
char *Curl_strcasestr(const char *haystack, const char *needle)
{
  size_t nlen = strlen(needle);
  size_t hlen = strlen(haystack);

  while(hlen-- >= nlen) {
    if(curl_strnequal(haystack, needle, nlen))
      return (char *)haystack;
    haystack++;
  }
  return NULL;
}

#ifndef HAVE_STRLCAT
/*
 * The strlcat() function appends the NUL-terminated string src to the end
+8 −5
Original line number Diff line number Diff line
@@ -36,6 +36,9 @@ int curl_strnequal(const char *first, const char *second, size_t max);
   argument is zero-byte terminated */
#define checkprefix(a,b)    strnequal(a,b,strlen(a))

/* case insensitive strstr() */
char *Curl_strcasestr(const char *haystack, const char *needle);

#ifndef HAVE_STRLCAT
#define strlcat(x,y,z) Curl_strlcat(x,y,z)
size_t Curl_strlcat(char *dst, const char *src, size_t siz);