Implement strstr.
authorcoderain <coderain@sdf.org>
Mon, 27 Feb 2017 05:10:15 +0000 (06:10 +0100)
committercoderain <coderain@sdf.org>
Mon, 27 Feb 2017 05:10:15 +0000 (06:10 +0100)
kernel/include/common.h
kernel/src/common.c

index e1e85aa982379bd5b144aee63c9649679ab12e14..34ca8df14679d627b6f0e10cc07b782fe81e2c72 100644 (file)
@@ -214,6 +214,7 @@ int strcmp(const char *str1, const char *str2);
 char *strchr(const char *str, char c);
 char *strrchr(const char *str, char c);
 int strncmp(const char *str1, const char *str2, int length);
+char *strstr(const char *haystack, const char *needle);
 char *strtok(char *str, const char *delimiters, char **endptr);
 dword_t strtoul(const char *str, char **endptr, int base);
 qword_t strtoull(const char *str, char **endptr, int base);
index fb10350a8382b50246af86d6dfb429b76ae150e4..47af9ae88276ff7041a15911374220062ba844c9 100644 (file)
@@ -431,6 +431,30 @@ int strncmp(const char *str1, const char *str2, int length)
     return 0;
 }
 
+char *strstr(const char *haystack, const char *needle)
+{
+    while (*haystack)
+    {
+        const char *s1 = haystack;
+        const char *s2 = needle;
+        bool_t found = TRUE;
+
+        while (*s2)
+        {
+            if (*s1++ != *s2++)
+            {
+                found = FALSE;
+                break;
+            }
+        }
+
+        if (found) return (char*)haystack;
+        haystack++;
+    }
+
+    return NULL;
+}
+
 char *strchr(const char *str, char c)
 {
     while ((*str != 0) && (*str != c)) str++;