Move declaration to avoid warning when compiling wo Libxml2
[yaz-moved-to-github.git] / src / oid_db.c
index 3795bba..4dc088d 100644 (file)
@@ -1,11 +1,10 @@
-/*
- * Copyright (C) 1995-2007, Index Data ApS
+/* This file is part of the YAZ toolkit.
+ * Copyright (C) Index Data
  * See the file LICENSE for details.
- *
- * $Id: oid_db.c,v 1.5 2007-04-16 21:53:09 adam Exp $
  */
 
 /**
+ * \file oid_db.c
  * \brief OID Database
  */
 #if HAVE_CONFIG_H
@@ -14,7 +13,6 @@
 
 #include <stdlib.h>
 #include <string.h>
-#include <ctype.h>
 
 #include <yaz/yaz-util.h>
 #include <yaz/odr.h>
@@ -28,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;
 
@@ -37,21 +35,23 @@ yaz_oid_db_t yaz_oid_std(void)
     return standard_db;
 }
 
-const int *yaz_string_to_oid(yaz_oid_db_t oid_db,
-                            int oclass, const char *name)
+#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)
 {
     for (; oid_db; oid_db = oid_db->next)
     {
         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;
@@ -60,29 +60,29 @@ const int *yaz_string_to_oid(yaz_oid_db_t oid_db,
     return 0;
 }
 
-int *yaz_string_to_oid_nmem(yaz_oid_db_t oid_list,
-                           int oclass, const char *name, NMEM nmem)
+Odr_oid *yaz_string_to_oid_nmem(yaz_oid_db_t oid_list,
+                                oid_class oclass, const char *name, NMEM nmem)
 {
-    const int *oid = yaz_string_to_oid(oid_list, oclass, name);
+    const Odr_oid *oid = yaz_string_to_oid(oid_list, oclass, name);
     if (oid)
        return odr_oiddup_nmem(nmem, oid);
     return odr_getoidbystr_nmem(nmem, name);
 }
 
-int *yaz_string_to_oid_odr(yaz_oid_db_t oid_list,
-                          int oclass, const char *name, ODR o)
+Odr_oid *yaz_string_to_oid_odr(yaz_oid_db_t oid_list,
+                               oid_class oclass, const char *name, ODR o)
 {
     return yaz_string_to_oid_nmem(oid_list, oclass, name, odr_getmem(o));
 }
 
 const char *yaz_oid_to_string(yaz_oid_db_t oid_db,
-                             const int *oid, int *oclass)
+                             const Odr_oid *oid, oid_class *oclass)
 {
     if (!oid)
        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))
@@ -96,9 +96,9 @@ const char *yaz_oid_to_string(yaz_oid_db_t oid_db,
     return 0;
 }
 
-const char *yaz_oid_to_string_buf(const int *oid, int *oclass, char *buf)
+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)
@@ -106,34 +106,45 @@ const char *yaz_oid_to_string_buf(const int *oid, int *oclass, char *buf)
     return oid_oid_to_dotstring(oid, buf);
 }
 
-int yaz_oid_is_iso2709(const int *oid)
+
+char *oid_name_to_dotstring(oid_class oclass, const char *name, char *oid_buf)
+{
+    const Odr_oid *oid = yaz_string_to_oid(yaz_oid_std(), oclass, name);
+    if (oid)
+        return oid_oid_to_dotstring(oid, oid_buf);
+    return 0;
+}
+
+
+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;
 }
 
-int yaz_oid_add(yaz_oid_db_t oid_db, int oclass, const char *name,
-               const int *new_oid)
+int yaz_oid_add(yaz_oid_db_t oid_db, oid_class oclass, const char *name,
+               const Odr_oid *new_oid)
 {
-    const int *oid = yaz_string_to_oid(oid_db, oclass, name);
+    const Odr_oid *oid = yaz_string_to_oid(oid_db, oclass, name);
     if (!oid)
     {
        struct yaz_oid_entry *ent;
-        int *alloc_oid;
+        Odr_oid *alloc_oid;
 
        while (oid_db->next)
            oid_db = oid_db->next;
-       oid_db->next = xmalloc(sizeof(*oid_db->next));
+       oid_db->next = (struct yaz_oid_db *) xmalloc(sizeof(*oid_db->next));
        oid_db = oid_db->next;
 
        oid_db->next = 0;
        oid_db->xmalloced = 1;
-       oid_db->entries = ent = xmalloc(2 * sizeof(*ent));
+       oid_db->entries = ent = (struct yaz_oid_entry *) xmalloc(2 * sizeof(*ent));
 
-        alloc_oid = xmalloc(sizeof(*alloc_oid) * (oid_oidlen(new_oid)+1));
+        alloc_oid = (Odr_oid *)
+            xmalloc(sizeof(*alloc_oid) * (oid_oidlen(new_oid)+1));
        oid_oidcpy(alloc_oid, new_oid);
         ent[0].oid = alloc_oid;
        ent[0].name = xstrdup(name);
@@ -149,7 +160,7 @@ int yaz_oid_add(yaz_oid_db_t oid_db, int oclass, const char *name,
 
 yaz_oid_db_t yaz_oid_db_new(void)
 {
-    yaz_oid_db_t p = xmalloc(sizeof(*p));
+    yaz_oid_db_t p = (yaz_oid_db_t) xmalloc(sizeof(*p));
     p->entries = 0;
     p->next = 0;
     p->xmalloced = 1;
@@ -175,15 +186,15 @@ void yaz_oid_db_destroy(yaz_oid_db_t oid_db)
 }
 
 void yaz_oid_trav(yaz_oid_db_t oid_db,
-                 void (*func)(const int *oid,
-                              int oclass, const char *name,
+                 void (*func)(const Odr_oid *oid,
+                              oid_class oclass, const char *name,
                               void *client_data),
                  void *client_data)
 {
     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);
     }
@@ -192,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