Merge branch 'master' into yaz-728
[yaz-moved-to-github.git] / src / oid_db.c
index 40cbf44..4dc088d 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.
  */
 
@@ -13,7 +13,6 @@
 
 #include <stdlib.h>
 #include <string.h>
-#include <ctype.h>
 
 #include <yaz/yaz-util.h>
 #include <yaz/odr.h>
@@ -27,7 +26,7 @@ struct yaz_oid_db {
 };
 
 struct yaz_oid_db standard_db_l = {
-    yaz_oid_standard_entries, 0, 0
+    0, 0, 0
 };
 yaz_oid_db_t standard_db = &standard_db_l;
 
@@ -36,6 +35,8 @@ yaz_oid_db_t yaz_oid_std(void)
     return standard_db;
 }
 
+#define get_entries(db) (db->xmalloced==0 ? yaz_oid_standard_entries : db->entries)
+
 const Odr_oid *yaz_string_to_oid(yaz_oid_db_t oid_db,
                                  oid_class oclass, const char *name)
 {
@@ -44,13 +45,13 @@ const Odr_oid *yaz_string_to_oid(yaz_oid_db_t oid_db,
         struct yaz_oid_entry *e;
         if (oclass != CLASS_GENERAL)
         {
-            for (e = oid_db->entries; e->name; e++)
+            for (e = get_entries(oid_db); e->name; e++)
             {
                 if (!yaz_matchstr(e->name, name) && oclass == e->oclass)
                     return e->oid;
             }
         }
-        for (e = oid_db->entries; e->name; e++)
+        for (e = get_entries(oid_db); e->name; e++)
         {
             if (!yaz_matchstr(e->name, name))
                 return e->oid;
@@ -81,7 +82,7 @@ const char *yaz_oid_to_string(yaz_oid_db_t oid_db,
        return 0;
     for (; oid_db; oid_db = oid_db->next)
     {
-       struct yaz_oid_entry *e = oid_db->entries;
+       struct yaz_oid_entry *e = get_entries(oid_db);
        for (; e->name; e++)
        {
            if (!oid_oidcmp(e->oid, oid))
@@ -97,7 +98,7 @@ const char *yaz_oid_to_string(yaz_oid_db_t oid_db,
 
 const char *yaz_oid_to_string_buf(const Odr_oid *oid, oid_class *oclass, char *buf)
 {
-    const char *p = yaz_oid_to_string(standard_db, oid, oclass);
+    const char *p = yaz_oid_to_string(yaz_oid_std(), oid, oclass);
     if (p)
        return p;
     if (oclass)
@@ -118,7 +119,7 @@ char *oid_name_to_dotstring(oid_class oclass, const char *name, char *oid_buf)
 int yaz_oid_is_iso2709(const Odr_oid *oid)
 {
     if (oid_oidlen(oid) == 6 && oid[0] == 1 && oid[1] == 2
-       && oid[2] == 840 && oid[3] == 10003 && oid[4] == 5 
+       && oid[2] == 840 && oid[3] == 10003 && oid[4] == 5
        && oid[5] <= 29 && oid[5] != 16)
        return 1;
     return 0;
@@ -192,8 +193,8 @@ void yaz_oid_trav(yaz_oid_db_t oid_db,
 {
     for (; oid_db; oid_db = oid_db->next)
     {
-       struct yaz_oid_entry *e = oid_db->entries;
-       
+       struct yaz_oid_entry *e = get_entries(oid_db);
+
        for (; e->name; e++)
            func(e->oid, e->oclass, e->name, client_data);
     }
@@ -202,6 +203,7 @@ void yaz_oid_trav(yaz_oid_db_t oid_db,
 /*
  * Local variables:
  * c-basic-offset: 4
+ * c-file-style: "Stroustrup"
  * indent-tabs-mode: nil
  * End:
  * vim: shiftwidth=4 tabstop=8 expandtab