/* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2010 Index Data
+ * Copyright (C) 1995-2013 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)
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;
}
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