X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fzoom-c.c;h=c05e51ca97796e7f3a88dd37413b65ae43f0fa82;hb=e70cbdfde382dd605d58fc112cc2458cfce37382;hp=384ef76cc6d93be9889e56ea4fbcc2fd9c5d8f56;hpb=1f3fe256d54ab81d998cd622abda89580cc0b3ff;p=yaz-moved-to-github.git diff --git a/src/zoom-c.c b/src/zoom-c.c index 384ef76..c05e51c 100644 --- a/src/zoom-c.c +++ b/src/zoom-c.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2005, Index Data ApS * See the file LICENSE for details. * - * $Id: zoom-c.c,v 1.64 2006-03-01 23:24:25 adam Exp $ + * $Id: zoom-c.c,v 1.70 2006-04-21 10:28:07 adam Exp $ */ /** * \file zoom-c.c @@ -245,6 +245,12 @@ void ZOOM_connection_remove_task (ZOOM_connection c) assert (0); } xfree (task); + + if (!c->tasks) + { + ZOOM_Event event = ZOOM_Event_create(ZOOM_EVENT_END); + ZOOM_connection_put_event(c, event); + } } } @@ -314,7 +320,7 @@ static char **set_DatabaseNames (ZOOM_connection con, ZOOM_options options, char **databaseNames; const char *cp = ZOOM_options_get (options, "databaseName"); - if (!cp || !*cp) + if ((!cp || !*cp) && con->host_port) { if (strncmp (con->host_port, "unix:", 5) == 0) cp = strchr(con->host_port+5, ':'); @@ -912,8 +918,8 @@ ZOOM_resultset_records (ZOOM_resultset r, ZOOM_record *recs, if (!r) return ; - yaz_log(log_api, "%p ZOOM_resultset_records r=%p start=%d count=%d", - r, r, start, count); + yaz_log(log_api, "%p ZOOM_resultset_records r=%p start=%ld count=%ld", + r, r, (long) start, (long) count); if (count && recs) force_present = 1; ZOOM_resultset_retrieve (r, force_present, start, count); @@ -1144,7 +1150,7 @@ static zoom_ret ZOOM_connection_send_init (ZOOM_connection c) ZOOM_options_get(c->options, "implementationName"), odr_prepend(c->odr_out, "ZOOM-C", ireq->implementationName)); - version = odr_strdup(c->odr_out, "$Revision: 1.64 $"); + version = odr_strdup(c->odr_out, "$Revision: 1.70 $"); if (strlen(version) > 10) /* check for unexpanded CVS strings */ version[strlen(version)-2] = '\0'; ireq->implementationVersion = odr_prepend(c->odr_out, @@ -1211,26 +1217,11 @@ static zoom_ret ZOOM_connection_send_init (ZOOM_connection c) if ((oi_unit = yaz_oi_update(oi, c->odr_out, NULL, 0, 0))) { - char **charsets_addresses = 0; - char **langs_addresses = 0; - int charsets_count = 0; - int langs_count = 0; - - if (c->charset) - nmem_strsplit_blank(c->odr_out->mem, c->charset, - &charsets_addresses, &charsets_count); - if (c->lang) - nmem_strsplit_blank(c->odr_out->mem, c->lang, - &langs_addresses, &langs_count); ODR_MASK_SET(ireq->options, Z_Options_negotiationModel); oi_unit->which = Z_OtherInfo_externallyDefinedInfo; oi_unit->information.externallyDefinedInfo = - yaz_set_proposal_charneg(c->odr_out, - (const char **) charsets_addresses, - charsets_count, - (const char **) langs_addresses, - langs_count, - 1); + yaz_set_proposal_charneg_list(c->odr_out, " ", + c->charset, c->lang, 1); } } assert (apdu); @@ -1874,7 +1865,7 @@ ZOOM_record_get (ZOOM_record rec, const char *type_spec, int *len) } return 0; } - else if (!strcmp (type, "xml") || !strcmp(type, "oai")) + else if (!strcmp (type, "xml")) { Z_External *r = (Z_External *) npr->u.databaseRecord; oident *ent = oid_getentbyoid(r->direct_reference); @@ -1898,8 +1889,6 @@ ZOOM_record_get (ZOOM_record rec, const char *type_spec, int *len) const char *ret_buf; int marc_decode_type = YAZ_MARC_MARCXML; - if (!strcmp(type, "oai")) - marc_decode_type = YAZ_MARC_OAIMARC; switch (ent->value) { case VAL_SOIF: @@ -2383,9 +2372,10 @@ static zoom_ret send_present(ZOOM_connection c) *req->resultSetStartPoint = resultset->start + 1; *req->numberOfRecordsRequested = resultset->step>0 ? resultset->step : resultset->count; + if (*req->numberOfRecordsRequested + resultset->start > resultset->size) + *req->numberOfRecordsRequested = resultset->size - resultset->start; assert (*req->numberOfRecordsRequested > 0); - if (syntax && *syntax) req->preferredRecordSyntax = yaz_str_to_z3950oid (c->odr_out, CLASS_RECSYN, syntax);