Add yaz_strcmp_null
authorAdam Dickmeiss <adam@indexdata.dk>
Tue, 16 Jul 2013 12:00:10 +0000 (14:00 +0200)
committerAdam Dickmeiss <adam@indexdata.dk>
Tue, 16 Jul 2013 12:00:10 +0000 (14:00 +0200)
include/yaz/matchstr.h
src/matchstr.c
src/zoom-record-cache.c

index 600cdaf..bdc5386 100644 (file)
@@ -87,6 +87,14 @@ YAZ_EXPORT int yaz_strncasecmp(const char *s1, const char *s2, size_t n);
 */
 YAZ_EXPORT int yaz_strcasecmp(const char *s1, const char *s2);
 
+/** \brief strcmp, null may be passed
+    \param s1 first buffer or NULL
+    \param s2 second buffer or NULL
+    \retval 0 buffers are equal
+    \retval >0 a > b
+    \retval <0 a < b
+*/
+YAZ_EXPORT int yaz_strcmp_null(const char *s1, const char *s2);
 
 YAZ_END_CDECL
 
index 82aa006..832ec45 100644 (file)
@@ -92,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
index 75b3945..0b22b33 100644 (file)
@@ -49,16 +49,6 @@ struct ZOOM_record_cache_p {
     ZOOM_record_cache next;
 };
 
-
-static int strcmp_null(const char *v1, const char *v2)
-{
-    if (!v1 && !v2)
-        return 0;
-    if (!v1 || !v2)
-        return -1;
-    return strcmp(v1, v2);
-}
-
 static size_t record_hash(int pos)
 {
     if (pos < 0)
@@ -80,9 +70,9 @@ void ZOOM_record_cache_add(ZOOM_resultset r, Z_NamePlusRecord *npr,
     for (rc = r->record_hash[record_hash(pos)]; rc; rc = rc->next)
     {
         if (pos == rc->pos
-            && strcmp_null(r->schema, rc->schema) == 0
-            && strcmp_null(elementSetName,rc->elementSetName) == 0
-            && strcmp_null(syntax, rc->syntax) == 0)
+            && yaz_strcmp_null(r->schema, rc->schema) == 0
+            && yaz_strcmp_null(elementSetName,rc->elementSetName) == 0
+            && yaz_strcmp_null(syntax, rc->syntax) == 0)
             break;
     }
     if (!rc)
@@ -136,11 +126,11 @@ ZOOM_record ZOOM_record_cache_lookup(ZOOM_resultset r, int pos,
     {
         if (pos == rc->pos)
         {
-            if (strcmp_null(r->schema, rc->schema))
+            if (yaz_strcmp_null(r->schema, rc->schema))
                 continue;
-            if (strcmp_null(elementSetName,rc->elementSetName))
+            if (yaz_strcmp_null(elementSetName,rc->elementSetName))
                 continue;
-            if (strcmp_null(syntax, rc->syntax))
+            if (yaz_strcmp_null(syntax, rc->syntax))
                 continue;
             return &rc->rec;
         }