X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzinfo.c;h=7a7e09757a83746cab32cccb46e03aff1796535d;hb=074e63e27b02896c927606ce5bb324a55613dd31;hp=69a3bad7d6a015153a7e72d8468615055089ae3b;hpb=9f2cdb515d5ba4c8f0806a3420b73061a8e9cd75;p=idzebra-moved-to-github.git diff --git a/index/zinfo.c b/index/zinfo.c index 69a3bad..7a7e097 100644 --- a/index/zinfo.c +++ b/index/zinfo.c @@ -1,4 +1,4 @@ -/* $Id: zinfo.c,v 1.53 2005-12-13 13:47:35 adam Exp $ +/* $Id: zinfo.c,v 1.56 2006-03-26 14:17:01 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -150,11 +150,15 @@ static Record createRecord(Records records, SYSNO *sysno) if (*sysno) { rec = rec_get(records, *sysno); + if (!rec) + return 0; xfree(rec->info[recInfo_storeData]); } else { rec = rec_new(records); + if (!rec) + return 0; *sysno = rec->sysno; rec->info[recInfo_fileType] = @@ -520,6 +524,12 @@ ZebraExplainInfo zebraExplain_open( /* write now because we want to be sure about the sysno */ trec = rec_new(records); + if (!trec) + { + yaz_log(YLOG_FATAL, "Cannot create root Explain record"); + nmem_destroy(zei->nmem); + return 0; + } trec->info[recInfo_fileType] = rec_strdup("grs.sgml", &trec->size[recInfo_fileType]); trec->info[recInfo_databaseName] = @@ -529,11 +539,11 @@ ZebraExplainInfo zebraExplain_open( trec->info[recInfo_storeData] = (char *) xmalloc(sgml_len); memcpy(trec->info[recInfo_storeData], sgml_buf, sgml_len); trec->size[recInfo_storeData] = sgml_len; - + rec_put(records, &trec); rec_rm(&trec); - } + zebraExplain_newDatabase(zei, "IR-Explain-1", 0); if (!zei->categoryList->dirty) @@ -986,6 +996,8 @@ static void zebraExplain_writeCategoryList (ZebraExplainInfo zei, #endif drec = createRecord (zei->records, &sysno); + if (!drec) + return; node_ci = data1_search_tag (zei->dh, node_categoryList, "/categoryList"); @@ -1040,6 +1052,8 @@ static void zebraExplain_writeAttributeDetails (ZebraExplainInfo zei, #endif drec = createRecord (zei->records, &zad->sysno); + if (!drec) + return; assert (zad->data1_tree); node_adinfo = data1_search_tag (zei->dh, zad->data1_tree, @@ -1182,6 +1196,8 @@ static void zebraExplain_writeDatabase (ZebraExplainInfo zei, yaz_log(YLOG_LOG, "zebraExplain_writeDatabase %s", zdi->databaseName); #endif drec = createRecord (zei->records, &zdi->sysno); + if (!drec) + return; assert (zdi->data1_database); node_dbinfo = data1_search_tag (zei->dh, zdi->data1_database, @@ -1272,6 +1288,8 @@ static void zebraExplain_writeAttributeSet (ZebraExplainInfo zei, #endif drec = createRecord (zei->records, &o->sysno); + if (!drec) + return; node_root = data1_read_sgml (zei->dh, zei->nmem, "AttributeSetInfo\n" @@ -1450,8 +1468,12 @@ int zebraExplain_lookup_ord (ZebraExplainInfo zei, int ord, struct zebDatabaseInfoB *zdb; for (zdb = zei->databaseInfo; zdb; zdb = zdb->next) { - struct zebSUInfoB *zsui = zdb->attributeDetails->SUInfo; - for ( ;zsui; zsui = zsui->next) + struct zebSUInfoB *zsui; + + if (zdb->attributeDetails->readFlag) + zebraExplain_readAttributeDetails (zei, zdb->attributeDetails); + + for (zsui = zdb->attributeDetails->SUInfo; zsui; zsui = zsui->next) if (zsui->info.ordinal == ord) { if (db) @@ -1609,6 +1631,13 @@ static void att_loadset(void *p, const char *n, const char *name) yaz_log(YLOG_WARN, "Directive attset failed for %s", name); } +int zebraExplain_get_database_ord(ZebraExplainInfo zei) +{ + if (!zei->curDatabaseInfo) + return -1; + return zei->curDatabaseInfo->ordinalDatabase; +} + void zebraExplain_loadAttsets (data1_handle dh, Res res) { res_trav(res, "attset", dh, att_loadset);