Adds cistrcmp from inferno
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 20 Jan 2014 20:41:30 +0000 (12:41 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 20 Jan 2014 21:25:42 +0000 (13:25 -0800)
Put it in strstr.c, which I think has other inferno stuff.

kern/include/string.h
kern/src/string.c
kern/src/strstr.c

index 8788e29..649c027 100644 (file)
@@ -18,6 +18,7 @@ STRING        strncpy(STRBUF(size) dst, const STRING src, size_t size);
 size_t strlcpy(STRBUF(size-1) dst, const STRING src, size_t size);
 int    strcmp(const STRING s1, const STRING s2);
 int    strncmp(const STRING s1, const STRING s2, size_t size);
+int cistrcmp(char *s1, char *s2);
 STRING strchr(const STRING s, char c);
 STRING strrchr(const STRING s, char c);
 STRING strfind(const STRING s, char c);
index 6ca5640..c4aafdd 100644 (file)
@@ -117,7 +117,7 @@ strrchr(const char *s, char c)
        char *lastc = NULL;
        for (; *s; s++)
                if (*s == c){
-                       lastc = s;
+                       lastc = (char*)s;
                }
        return lastc;
 }
index 17d0c80..56e371d 100644 (file)
@@ -20,3 +20,28 @@ strstr(char *s1, char *s2)
                        return p;
        return 0;
 }
+
+/* Case insensitive strcmp */
+int
+cistrcmp(char *s1, char *s2)
+{
+       int c1, c2;
+
+       while(*s1){
+               c1 = *( uint8_t *)s1++;
+               c2 = *( uint8_t *)s2++;
+
+               if(c1 == c2)
+                       continue;
+
+               if(c1 >= 'A' && c1 <= 'Z')
+                       c1 -= 'A' - 'a';
+
+               if(c2 >= 'A' && c2 <= 'Z')
+                       c2 -= 'A' - 'a';
+
+               if(c1 != c2)
+                       return c1 - c2;
+       }
+       return -*s2;
+}