strcasestr: another BSDism
authorAlan Cox <alan@linux.intel.com>
Fri, 2 Jan 2015 23:06:15 +0000 (23:06 +0000)
committerAlan Cox <alan@linux.intel.com>
Fri, 2 Jan 2015 23:06:15 +0000 (23:06 +0000)
Library/include/string.h
Library/libs/strcasestr.c [new file with mode: 0644]

index 8d60d3c..858f772 100644 (file)
@@ -51,6 +51,9 @@ extern size_t strspn __P ((const char *, const char *));
 
 extern size_t strlcpy __P((char *, const char *, size_t));
 extern size_t strlcat __P((char *, const char *, size_t));
+
+extern char *strcasestr __P((const char *, const char *));
+
 #ifdef z80
 #pagma inline(memcpy)
 #pagma inline(memset)
diff --git a/Library/libs/strcasestr.c b/Library/libs/strcasestr.c
new file mode 100644 (file)
index 0000000..67cd83d
--- /dev/null
@@ -0,0 +1,20 @@
+/* Another BSDism */
+
+#include <string.h>
+#include <ctype.h>
+
+char *strcasestr(const char *needle, const char *haystack)
+{
+  size_t s = strlen(needle);
+  char c = tolower(needle[0]);
+
+  while(*haystack) {
+    /* check the lead byte here for speed */
+    if (tolower(*haystack) == c) {
+      if (strncasecmp(needle, haystack, s) == 0)
+        return haystack;
+    }
+    haystack++;
+  }
+  return NULL;
+}