X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=server%2Fseshigh.c;h=44d69f7a8d6be75974a16c948bfda649dd8092c9;hp=542143254c32ff109e3940470242fc60111365b8;hb=f69d4aa4609ff3daa71733da1ea0fcd8322ab954;hpb=962f5f857455567d9b56cc17d96eb95608a0222e diff --git a/server/seshigh.c b/server/seshigh.c index 5421432..44d69f7 100644 --- a/server/seshigh.c +++ b/server/seshigh.c @@ -4,7 +4,13 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: seshigh.c,v $ - * Revision 1.80 1998-09-02 12:41:53 adam + * Revision 1.82 1998-10-20 14:00:30 quinn + * Fixed Scan + * + * Revision 1.81 1998/10/13 16:12:24 adam + * Added support for Surrogate Diagnostics for Scan Term entries. + * + * Revision 1.80 1998/09/02 12:41:53 adam * Added decode stream in bend search structures. * * Revision 1.79 1998/08/19 16:10:08 adam @@ -885,11 +891,15 @@ static void set_addinfo (Z_DefaultDiagFormat *dr, char *addinfo) static Z_Records *diagrec(association *assoc, int error, char *addinfo) { int oid[OID_SIZE]; - Z_Records *rec = (Z_Records *)odr_malloc (assoc->encode, sizeof(*rec)); + Z_Records *rec = (Z_Records *) + odr_malloc (assoc->encode, sizeof(*rec)); oident bib1; - int *err = (int *)odr_malloc (assoc->encode, sizeof(*err)); - Z_DiagRec *drec = (Z_DiagRec *)odr_malloc (assoc->encode, sizeof(*drec)); - Z_DefaultDiagFormat *dr = (Z_DefaultDiagFormat *)odr_malloc (assoc->encode, sizeof(*dr)); + int *err = (int *) + odr_malloc (assoc->encode, sizeof(*err)); + Z_DiagRec *drec = (Z_DiagRec *) + odr_malloc (assoc->encode, sizeof(*drec)); + Z_DefaultDiagFormat *dr = (Z_DefaultDiagFormat *) + odr_malloc (assoc->encode, sizeof(*dr)); bib1.proto = assoc->proto; bib1.oclass = CLASS_DIAGSET; @@ -1440,14 +1450,10 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd) res->numberOfEntriesReturned = numberOfEntriesReturned; res->positionOfTerm = 0; res->entries = ents; -#if ASN_COMPILED ents->num_entries = 0; ents->entries = NULL; ents->num_nonsurrogateDiagnostics = 0; ents->nonsurrogateDiagnostics = NULL; -#else - ents->which = Z_ListEntries_entries; -#endif res->attributeSet = 0; res->otherInfo = 0; @@ -1482,11 +1488,6 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd) else { int i; -#ifdef ASN_COMPILED -#else - Z_Entries *list = (Z_Entries *) - odr_malloc (assoc->encode, sizeof(*list)); -#endif Z_Entry **tab = (Z_Entry **) odr_malloc (assoc->encode, sizeof(*tab) * srs->num_entries); @@ -1494,16 +1495,9 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd) *scanStatus = Z_Scan_partial_5; else *scanStatus = Z_Scan_success; -#ifdef ASN_COMPILED ents->entries = tab; ents->num_entries = srs->num_entries; res->numberOfEntriesReturned = &ents->num_entries; -#else - ents->u.entries = list; - list->entries = tab; - list->num_entries = srs->num_entries; - res->numberOfEntriesReturned = &list->num_entries; -#endif res->positionOfTerm = &srs->term_position; for (i = 0; i < srs->num_entries; i++) { @@ -1512,35 +1506,50 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd) Odr_oct *o; tab[i] = e = (Z_Entry *)odr_malloc(assoc->encode, sizeof(*e)); - e->which = Z_Entry_termInfo; - e->u.termInfo = t = (Z_TermInfo *)odr_malloc(assoc->encode, sizeof(*t)); - t->suggestedAttributes = 0; - t->displayTerm = 0; - t->alternativeTerm = 0; - t->byAttributes = 0; - t->otherTermInfo = 0; - t->globalOccurrences = &srs->entries[i].occurrences; - t->term = (Z_Term *)odr_malloc(assoc->encode, sizeof(*t->term)); - t->term->which = Z_Term_general; - t->term->u.general = o = (Odr_oct *)odr_malloc(assoc->encode, - sizeof(Odr_oct)); - o->buf = (unsigned char *)odr_malloc(assoc->encode, o->len = o->size = - strlen(srs->entries[i].term)); - memcpy(o->buf, srs->entries[i].term, o->len); - logf(LOG_DEBUG, " term #%d: '%s' (%d)", i, - srs->entries[i].term, srs->entries[i].occurrences); + if (srs->entries[i].occurrences >= 0) + { + e->which = Z_Entry_termInfo; + e->u.termInfo = t = (Z_TermInfo *) + odr_malloc(assoc->encode, sizeof(*t)); + t->suggestedAttributes = 0; + t->displayTerm = 0; + t->alternativeTerm = 0; + t->byAttributes = 0; + t->otherTermInfo = 0; + t->globalOccurrences = &srs->entries[i].occurrences; + t->term = (Z_Term *) + odr_malloc(assoc->encode, sizeof(*t->term)); + t->term->which = Z_Term_general; + t->term->u.general = o = + (Odr_oct *)odr_malloc(assoc->encode, sizeof(Odr_oct)); + o->buf = (unsigned char *) + odr_malloc(assoc->encode, o->len = o->size = + strlen(srs->entries[i].term)); + memcpy(o->buf, srs->entries[i].term, o->len); + logf(LOG_DEBUG, " term #%d: '%s' (%d)", i, + srs->entries[i].term, srs->entries[i].occurrences); + } + else + { + Z_Records *zrecords = diagrec (assoc, + srs->entries[i].errcode, + srs->entries[i].errstring); + logf(LOG_DEBUG, " term sd code=%d addinfo=%s", + srs->entries[i].errcode, + (srs->entries[i].errstring?srs->entries[i].errstring : + "")); + assert (zrecords->which == Z_Records_NSD); + e->which = Z_Entry_surrogateDiagnostic; + e->u.surrogateDiagnostic = + zrecords->u.nonSurrogateDiagnostic; + } } } } if (diagrecs_p) { -#ifdef ASN_COMPILED ents->num_nonsurrogateDiagnostics = diagrecs_p->num_diagRecs; ents->nonsurrogateDiagnostics = diagrecs_p->diagRecs; -#else - ents->u.nonSurrogateDiagnostics = diagrecs_p; - ents->which = Z_ListEntries_nonSurrogateDiagnostics; -#endif } return apdu; }