Implement cs_get_peer_certificate_x509 for GnuTLS
[yaz-moved-to-github.git] / src / matchstr.c
index c1653f7..6869918 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2009 Index Data
+ * Copyright (C) Index Data
  * See the file LICENSE for details.
  */
 
 
 #include <stdio.h>
 #include <assert.h>
-#include <ctype.h>
 #include <string.h>
+#include <yaz/yaz-iconv.h>
 #include <yaz/matchstr.h>
 
+int yaz_strcasecmp(const char *s1, const char *s2)
+{
+    return yaz_strncasecmp(s1, s2, strlen(s1) + 1);
+}
+
+int yaz_strncasecmp(const char *s1, const char *s2, size_t n)
+{
+    while (n--)
+    {
+        unsigned char c1 = *s1++;
+        unsigned char c2 = *s2++;
+        if (yaz_isupper(c1))
+            c1 = yaz_tolower(c1);
+        if (yaz_isupper(c2))
+            c2 = yaz_tolower(c2);
+        if (c1 != c2)
+            return c1 - c2;
+    }
+    return 0;
+}
+
 int yaz_matchstr(const char *s1, const char *s2)
 {
     while (*s1 && *s2)
@@ -35,10 +56,10 @@ int yaz_matchstr(const char *s1, const char *s2)
             break;
         if (c2 != '.')
         {
-            if (isupper(c1))
-                c1 = tolower(c1);
-            if (isupper(c2))
-                c2 = tolower(c2);
+            if (yaz_isupper(c1))
+                c1 = yaz_tolower(c1);
+            if (yaz_isupper(c2))
+                c2 = yaz_tolower(c2);
             if (c1 != c2)
                 break;
         }
@@ -71,6 +92,20 @@ int yaz_memcmp(const void *a, const void *b, size_t len_a, size_t len_b)
     return len_a - len_b;
 }
 
+int yaz_strcmp_null(const char *v1, const char *v2)
+{
+    if (v1)
+    {
+        if (v2)
+            return strcmp(v1, v2);
+        else
+            return 1;
+    }
+    else if (v2)
+        return -1;
+    return 0;
+}
+
 /*
  * Local variables:
  * c-basic-offset: 4