summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/linux/string.h1
-rw-r--r--lib/string.c27
2 files changed, 28 insertions, 0 deletions
diff --git a/include/linux/string.h b/include/linux/string.h
index 5e4594b19df..986499dfc70 100644
--- a/include/linux/string.h
+++ b/include/linux/string.h
@@ -71,6 +71,7 @@ extern char * strstr(const char *,const char *);
#ifndef __HAVE_ARCH_STRNSTR
extern char *strnstr(const char *, const char *, size_t);
#endif
+char *strcasestr(const char *, const char *);
#ifndef __HAVE_ARCH_STRLEN
extern __kernel_size_t strlen(const char *);
#endif
diff --git a/lib/string.c b/lib/string.c
index 20c934c18c3..dbf2ce340df 100644
--- a/lib/string.c
+++ b/lib/string.c
@@ -701,6 +701,33 @@ char *strstr(const char *s1, const char *s2)
}
#endif
+/**
+ * strcasestr() - Case insensitive substring search
+ *
+ * @haystack: string to be searched
+ * @needle: string to search for
+ *
+ * Return: pointer to the first occurrence or NULL
+ *
+ * The case of both strings are ignored.
+ */
+char *strcasestr(const char *haystack, const char *needle)
+{
+ size_t l1, l2;
+
+ l1 = strlen(haystack);
+ l2 = strlen(needle);
+
+ while (l1 >= l2) {
+ if (!strncasecmp(haystack, needle, l2))
+ return (char *)haystack;
+ haystack++;
+ l1--;
+ }
+
+ return NULL;
+}
+
#ifndef __HAVE_ARCH_MEMCHR
/**
* memchr - Find a character in an area of memory.