X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Foid_db.c;h=3795bba3b86bd5bc713b7c0e495b6ec9dd48532f;hp=2b1d79ef16fbd16764f5e45b88c7f030c210c450;hb=3cdfbd27dfc8dd15619f127ae78bf0f71b27dd6d;hpb=4ef54cf7f0c56ebb62f1a4c9bfecc50feca18656 diff --git a/src/oid_db.c b/src/oid_db.c index 2b1d79e..3795bba 100644 --- a/src/oid_db.c +++ b/src/oid_db.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2007, Index Data ApS * See the file LICENSE for details. * - * $Id: oid_db.c,v 1.4 2007-04-16 08:43:08 adam Exp $ + * $Id: oid_db.c,v 1.5 2007-04-16 21:53:09 adam Exp $ */ /** @@ -21,171 +21,15 @@ #include #include -struct yaz_oid_entry { - int oclass; - int oid[OID_SIZE]; - char *name; -}; - -#define Z3950_PREFIX 1, 2, 840, 10003 - -static struct yaz_oid_entry standard_list[] = -{ - /* General definitions */ - {CLASS_TRANSYN, {2, 1, 1,-1}, "BER" }, - {CLASS_TRANSYN, {1, 0, 2709, 1, 1,-1}, "ISO2709"}, - {CLASS_GENERAL, {1, 0, 10161, 2, 1,-1}, OID_STR_ILL_1 }, - {CLASS_ABSYN, {2, 1,-1}, "Z-APDU"}, - {CLASS_APPCTX, {1, 1,-1}, "Z-BASIC"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3, 1,-1}, "Bib-1"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3, 2,-1}, "Exp-1"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3, 3,-1}, "Ext-1"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3, 4,-1}, "CCL-1"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3, 5,-1}, "GILS"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3, 5,-1}, "GILS-attset"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3, 6,-1}, "STAS-attset"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3, 7,-1}, "Collections-attset"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3, 8,-1}, "CIMI-attset"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3, 9,-1}, "Geo-attset"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3, 10,-1}, "ZBIG"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3, 11,-1}, "Util"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3, 12,-1}, "XD-1"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3, 13,-1}, "Zthes"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3, 14,-1}, "Fin-1"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3, 15,-1}, "Dan-1"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3, 16,-1}, "Holdings"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3, 17,-1}, "MARC"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3, 18,-1}, "Bib-2"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3, 19,-1}, "ZeeRex"}, - /* New applications should use Zthes-1 instead of this Satan-spawn */ - {CLASS_ATTSET, {Z3950_PREFIX, 3,1000, 81,1,-1}, "Thesaurus-attset"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3,1000, 81,2,-1}, "IDXPATH"}, - {CLASS_ATTSET, {Z3950_PREFIX, 3,1000, 81,3,-1}, "EXTLITE"}, - {CLASS_DIAGSET, {Z3950_PREFIX, 4, 1,-1}, OID_STR_BIB1}, - {CLASS_DIAGSET, {Z3950_PREFIX, 4, 2,-1}, OID_STR_DIAG1}, - {CLASS_DIAGSET, {Z3950_PREFIX, 4, 3,-1}, "Diag-ES"}, - {CLASS_DIAGSET, {Z3950_PREFIX, 4, 3,-1}, "Diag-General"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 1,-1}, "Unimarc"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 2,-1}, "Intermarc"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 3,-1}, "CCF"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 10,-1}, OID_STR_USMARC}, - /* MARC21 is just an alias for the original USmarc */ - {CLASS_RECSYN, {Z3950_PREFIX, 5, 10,-1}, "MARC21"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 11,-1}, "UKmarc"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 12,-1}, "Normarc"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 13,-1}, "Librismarc"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 14,-1}, "Danmarc"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 15,-1}, "Finmarc"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 16,-1}, "MAB"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 17,-1}, "Canmarc"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 18,-1}, "SBN"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 19,-1}, "Picamarc"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 20,-1}, "Ausmarc"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 21,-1}, "Ibermarc"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 22,-1}, "Carmarc"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 23,-1}, "Malmarc"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 24,-1}, "JPmarc"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 25,-1}, "SWEmarc"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 26,-1}, "SIGLEmarc"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 27,-1}, "ISDSmarc"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 28,-1}, "RUSmarc"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 29,-1}, "Hunmarc"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 30,-1}, "NACSIS-CATP"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 31,-1}, "FINMARC2000"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 32,-1}, "MARC21-fin"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 100,-1}, OID_STR_EXPLAIN}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 101,-1}, OID_STR_SUTRS}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 102,-1}, OID_STR_OPAC}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 103,-1}, OID_STR_SUMMARY}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 104,-1}, "GRS-0"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 105,-1}, OID_STR_GRS1 }, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 106,-1}, OID_STR_EXTENDED}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 107,-1}, "Fragment"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,1,-1}, "pdf"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,2,-1}, OID_STR_POSTSCRIPT}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,3,-1}, OID_STR_HTML}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,4,-1}, "tiff"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,5,-1}, "gif"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,6,-1}, "jpeg"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,7,-1}, "png"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,8,-1}, "mpeg"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,9,-1}, "sgml"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 110,1,-1}, "tiff-b"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 110,2,-1}, "wav"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 111,-1}, "SQL-RS"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 1000, 81, 2,-1}, OID_STR_SOIF}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 109, 10,-1}, OID_STR_XML }, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 109, 10,-1}, "application-XML"}, - {CLASS_RECSYN, {Z3950_PREFIX, 5, 109, 11,-1}, OID_STR_APPLICATION_XML }, - {CLASS_RESFORM, {Z3950_PREFIX, 7, 1,-1}, "Resource-1"}, - {CLASS_RESFORM, {Z3950_PREFIX, 7, 2,-1}, "Resource-2"}, - {CLASS_RESFORM, {Z3950_PREFIX, 7, 1000, 81, 1,-1}, "UNIverse-Resource-Report"}, - {CLASS_ACCFORM, {Z3950_PREFIX, 8, 1,-1}, "Prompt-1"}, - {CLASS_ACCFORM, {Z3950_PREFIX, 8, 2,-1}, "Des-1"}, - {CLASS_ACCFORM, {Z3950_PREFIX, 8, 3,-1}, "Krb-1"}, - {CLASS_EXTSERV, {Z3950_PREFIX, 9, 1,-1}, "Pers. set"}, - {CLASS_EXTSERV, {Z3950_PREFIX, 9, 2,-1}, "Pers. query"}, - {CLASS_EXTSERV, {Z3950_PREFIX, 9, 3,-1}, "Per'd query"}, - {CLASS_EXTSERV, {Z3950_PREFIX, 9, 4,-1}, OID_STR_ITEMORDER }, - {CLASS_EXTSERV, {Z3950_PREFIX, 9, 5,-1}, "DB. Update (first version)"}, - {CLASS_EXTSERV, {Z3950_PREFIX, 9, 5,1,-1}, "DB. Update (second version)"}, - {CLASS_EXTSERV, {Z3950_PREFIX, 9, 5, 1, 1,-1}, OID_STR_EXT_UPDATE}, - {CLASS_EXTSERV, {Z3950_PREFIX, 9, 6,-1}, "exp. spec."}, - {CLASS_EXTSERV, {Z3950_PREFIX, 9, 7,-1}, "exp. inv."}, - {CLASS_EXTSERV, {Z3950_PREFIX, 9, 1000, 81, 1,-1}, OID_STR_ADMIN}, - {CLASS_USERINFO, {Z3950_PREFIX, 10, 1,-1}, OID_STR_SEARCH_RESULT_1}, - {CLASS_USERINFO, {Z3950_PREFIX, 10, 2,-1}, "CharSetandLanguageNegotiation"}, - {CLASS_USERINFO, {Z3950_PREFIX, 10, 3,-1}, OID_STR_USERINFO_1}, - {CLASS_USERINFO, {Z3950_PREFIX, 10, 4,-1}, "MultipleSearchTerms-1"}, - {CLASS_USERINFO, {Z3950_PREFIX, 10, 5,-1}, "MultipleSearchTerms-2"}, - {CLASS_USERINFO, {Z3950_PREFIX, 10, 6,-1}, "DateTime"}, - {CLASS_USERINFO, {Z3950_PREFIX, 10, 1000, 81, 1,-1}, OID_STR_PROXY}, - {CLASS_USERINFO, {Z3950_PREFIX, 10, 1000, 81, 2,-1}, OID_STR_COOKIE}, - {CLASS_USERINFO, {Z3950_PREFIX, 10, 1000, 81, 3,-1}, OID_STR_CLIENT_IP }, - {CLASS_ELEMSPEC, {Z3950_PREFIX, 11, 1,-1}, "Espec-1"}, - {CLASS_VARSET, {Z3950_PREFIX, 12, 1,-1}, OID_STR_VARIANT_1}, - {CLASS_SCHEMA, {Z3950_PREFIX, 13, 1,-1}, "WAIS-schema"}, - {CLASS_SCHEMA, {Z3950_PREFIX, 13, 2,-1}, "GILS-schema"}, - {CLASS_SCHEMA, {Z3950_PREFIX, 13, 3,-1}, "Collections-schema"}, - {CLASS_SCHEMA, {Z3950_PREFIX, 13, 4,-1}, "Geo-schema"}, - {CLASS_SCHEMA, {Z3950_PREFIX, 13, 5,-1}, "CIMI-schema"}, - {CLASS_SCHEMA, {Z3950_PREFIX, 13, 6,-1}, "Update ES"}, - {CLASS_SCHEMA, {Z3950_PREFIX, 13, 7,-1}, "Holdings"}, - {CLASS_SCHEMA, {Z3950_PREFIX, 13, 8,-1}, "Zthes"}, - {CLASS_SCHEMA, {Z3950_PREFIX, 13, 1000, 81, 1,-1}, "thesaurus-schema"}, - {CLASS_SCHEMA, {Z3950_PREFIX, 13, 1000, 81, 2,-1}, "Explain-schema"}, - {CLASS_TAGSET, {Z3950_PREFIX, 14, 1,-1}, "TagsetM"}, - {CLASS_TAGSET, {Z3950_PREFIX, 14, 2,-1}, "TagsetG"}, - {CLASS_TAGSET, {Z3950_PREFIX, 14, 3,-1}, "STAS-tagset"}, - {CLASS_TAGSET, {Z3950_PREFIX, 14, 4,-1}, "GILS-tagset"}, - {CLASS_TAGSET, {Z3950_PREFIX, 14, 5,-1}, "Collections-tagset"}, - {CLASS_TAGSET, {Z3950_PREFIX, 14, 6,-1}, "CIMI-tagset"}, - {CLASS_TAGSET, {Z3950_PREFIX, 14, 1000, 81, 1,-1}, "thesaurus-tagset"}, - {CLASS_TAGSET, {Z3950_PREFIX, 14, 1000, 81, 2,-1}, "Explain-tagset"}, - {CLASS_TAGSET, {Z3950_PREFIX, 14, 8,-1}, "Zthes-tagset"}, - {CLASS_NEGOT, {Z3950_PREFIX, 15, 3,-1}, OID_STR_CHARNEG_3 }, - {CLASS_NEGOT, {Z3950_PREFIX, 15, 4,-1}, OID_STR_CHARNEG_4 }, - {CLASS_NEGOT, {Z3950_PREFIX, 15, 1000, 81, 1, -1}, OID_STR_ID_CHARSET }, - {CLASS_USERINFO, {1, 2, 840, 1003, 16, 2, -1}, "CQL"}, - {CLASS_GENERAL, {1,0,10646,1,0,2,-1}, "UCS-2"}, - {CLASS_GENERAL, {1,0,10646,1,0,4,-1}, "UCS-4"}, - {CLASS_GENERAL, {1,0,10646,1,0,5,-1}, "UTF-16"}, - {CLASS_GENERAL, {1,0,10646,1,0,8,-1}, "UTF-8"}, - {CLASS_USERINFO, {Z3950_PREFIX, 10, 1000, 17, 1, -1}, "OCLC-userInfo"}, - {CLASS_EXTSERV, {Z3950_PREFIX, 9, 1000,105,4,-1}, OID_STR_XMLES }, - {CLASS_NOP, {-1}, 0} -}; - struct yaz_oid_db { - struct yaz_oid_entry *entries; - struct yaz_oid_db *next; - int xmalloced; + struct yaz_oid_entry *entries; + struct yaz_oid_db *next; + int xmalloced; }; struct yaz_oid_db standard_db_l = { - standard_list, 0, 0 + yaz_oid_standard_entries, 0, 0 }; - yaz_oid_db_t standard_db = &standard_db_l; yaz_oid_db_t yaz_oid_std(void) @@ -278,6 +122,7 @@ int yaz_oid_add(yaz_oid_db_t oid_db, int oclass, const char *name, if (!oid) { struct yaz_oid_entry *ent; + int *alloc_oid; while (oid_db->next) oid_db = oid_db->next; @@ -287,12 +132,16 @@ int yaz_oid_add(yaz_oid_db_t oid_db, int oclass, const char *name, oid_db->next = 0; oid_db->xmalloced = 1; oid_db->entries = ent = xmalloc(2 * sizeof(*ent)); - ent[0].oclass = oclass; - oid_oidcpy(ent[0].oid, new_oid); + + alloc_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); - ent[1].oclass = CLASS_NOP; - ent[1].oid[0] = -1; + ent[0].oclass = oclass; + + ent[1].oid = 0; ent[1].name = 0; + ent[1].oclass = CLASS_NOP; return 0; } return -1; @@ -340,97 +189,6 @@ void yaz_oid_trav(yaz_oid_db_t oid_db, } } -const int *yaz_oid_xml(void) -{ - return yaz_string_to_oid(yaz_oid_std(), CLASS_RECSYN, OID_STR_XML); -} - -const int *yaz_oid_application_xml(void) -{ - return yaz_string_to_oid(yaz_oid_std(), CLASS_RECSYN, - OID_STR_APPLICATION_XML); -} -const int *yaz_oid_html(void) -{ - return yaz_string_to_oid(yaz_oid_std(), CLASS_RECSYN, OID_STR_HTML); -} - -const int *yaz_oid_sutrs(void) -{ - return yaz_string_to_oid(yaz_oid_std(), CLASS_RECSYN, OID_STR_SUTRS); -} - -const int *yaz_oid_opac(void) -{ - return yaz_string_to_oid(yaz_oid_std(), CLASS_RECSYN, OID_STR_OPAC); -} - -const int *yaz_oid_grs1(void) -{ - return yaz_string_to_oid(yaz_oid_std(), CLASS_RECSYN, OID_STR_GRS1); -} - -const int *yaz_oid_postscript(void) -{ - return yaz_string_to_oid(yaz_oid_std(), CLASS_RECSYN, OID_STR_POSTSCRIPT); -} - -const int *yaz_oid_explain(void) -{ - return yaz_string_to_oid(yaz_oid_std(), CLASS_RECSYN, OID_STR_EXPLAIN); -} - -const int *yaz_oid_extended(void) -{ - return yaz_string_to_oid(yaz_oid_std(), CLASS_RECSYN, OID_STR_EXTENDED); -} - -const int *yaz_oid_summary(void) -{ - return yaz_string_to_oid(yaz_oid_std(), CLASS_RECSYN, OID_STR_SUMMARY); -} - -const int *yaz_oid_get_usmarc(void) -{ - return yaz_string_to_oid(yaz_oid_std(), CLASS_RECSYN, OID_STR_USMARC); -} - -const int *yaz_oid_soif(void) -{ - return yaz_string_to_oid(yaz_oid_std(), CLASS_RECSYN, OID_STR_SOIF); -} - -const int *yaz_oid_attset_bib1(void) -{ - return yaz_string_to_oid(yaz_oid_std(), CLASS_ATTSET, OID_STR_BIB1); -} - -const int *yaz_oid_diag1(void) -{ - return yaz_string_to_oid(yaz_oid_std(), CLASS_DIAGSET, OID_STR_DIAG1); -} - -const int *yaz_oid_proxy(void) -{ - return yaz_string_to_oid(yaz_oid_std(), CLASS_USERINFO, OID_STR_PROXY); -} - -const int *yaz_oid_cookie(void) -{ - return yaz_string_to_oid(yaz_oid_std(), CLASS_USERINFO, OID_STR_COOKIE); -} - -const int *yaz_oid_search_result_1(void) -{ - return yaz_string_to_oid(yaz_oid_std(), CLASS_USERINFO, - OID_STR_SEARCH_RESULT_1); -} - -const int *yaz_oid_variant1(void) -{ - return yaz_string_to_oid(yaz_oid_std(), CLASS_VARSET, OID_STR_VARIANT_1); -} - /* * Local variables: * c-basic-offset: 4