X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fseshigh.c;h=44d6619001283a2fc22244cc12c73b0609e7498f;hp=9bf39cae82cc5c75ed234d43c00bb0a704df87f8;hb=92e360a6e22fc5fda22d7f6a6449c3c8f0ee8fb9;hpb=002e8d5e6cdb9f188fd91df930b6cc763f50f96d diff --git a/src/seshigh.c b/src/seshigh.c index 9bf39ca..44d6619 100644 --- a/src/seshigh.c +++ b/src/seshigh.c @@ -846,7 +846,7 @@ static int ccl2pqf(ODR odr, const Odr_oct *ccl, CCL_bibset bibset, return 0; } -static void srw_bend_search(association *assoc, request *req, +static void srw_bend_search(association *assoc, Z_SRW_PDU *sr, Z_SRW_PDU *res, int *http_code) @@ -1149,7 +1149,7 @@ static void srw_bend_search(association *assoc, request *req, } } -static char *srw_bend_explain_default(void *handle, bend_explain_rr *rr) +static char *srw_bend_explain_default(bend_explain_rr *rr) { #if YAZ_HAVE_XML2 xmlNodePtr ptr = (xmlNode *) rr->server_node_ptr; @@ -1185,7 +1185,7 @@ static char *srw_bend_explain_default(void *handle, bend_explain_rr *rr) return 0; } -static void srw_bend_explain(association *assoc, request *req, +static void srw_bend_explain(association *assoc, Z_SRW_PDU *sr, Z_SRW_explainResponse *srw_res, int *http_code) @@ -1211,7 +1211,7 @@ static void srw_bend_explain(association *assoc, request *req, if (assoc->init->bend_explain) (*assoc->init->bend_explain)(assoc->backend, &rr); else - srw_bend_explain_default(assoc->backend, &rr); + srw_bend_explain_default(&rr); if (rr.explain_buf) { @@ -1233,7 +1233,7 @@ static void srw_bend_explain(association *assoc, request *req, } } -static void srw_bend_scan(association *assoc, request *req, +static void srw_bend_scan(association *assoc, Z_SRW_PDU *sr, Z_SRW_scanResponse *srw_res, int *http_code) @@ -1421,7 +1421,7 @@ static void srw_bend_scan(association *assoc, request *req, } -static void srw_bend_update(association *assoc, request *req, +static void srw_bend_update(association *assoc, Z_SRW_PDU *sr, Z_SRW_updateResponse *srw_res, int *http_code) @@ -1790,7 +1790,7 @@ static void process_http_request(association *assoc, request *req) } else { - srw_bend_search(assoc, req, sr, res, &http_code); + srw_bend_search(assoc, sr, res, &http_code); } if (http_code == 200) soap_package->u.generic->p = res; @@ -1805,8 +1805,7 @@ static void process_http_request(association *assoc, request *req) res->u.explain_response->diagnostics = diagnostic; res->u.explain_response->num_diagnostics = num_diagnostic; } - srw_bend_explain(assoc, req, sr, - res->u.explain_response, &http_code); + srw_bend_explain(assoc, sr, res->u.explain_response, &http_code); if (http_code == 200) soap_package->u.generic->p = res; } @@ -1820,8 +1819,7 @@ static void process_http_request(association *assoc, request *req) res->u.scan_response->diagnostics = diagnostic; res->u.scan_response->num_diagnostics = num_diagnostic; } - srw_bend_scan(assoc, req, sr, - res->u.scan_response, &http_code); + srw_bend_scan(assoc, sr, res->u.scan_response, &http_code); if (http_code == 200) soap_package->u.generic->p = res; } @@ -1836,8 +1834,7 @@ static void process_http_request(association *assoc, request *req) res->u.update_response->num_diagnostics = num_diagnostic; } yaz_log(YLOG_DEBUG, "num_diag = %d", res->u.update_response->num_diagnostics ); - srw_bend_update(assoc, req, sr, - res->u.update_response, &http_code); + srw_bend_update(assoc, sr, res->u.update_response, &http_code); if (http_code == 200) soap_package->u.generic->p = res; } @@ -2426,13 +2423,19 @@ static Z_Records *pack_records(association *a, char *setname, Odr_int start, (Z_Records *) odr_malloc(a->encode, sizeof(*records)); Z_NamePlusRecordList *reclist = (Z_NamePlusRecordList *) odr_malloc(a->encode, sizeof(*reclist)); - Z_NamePlusRecord **list = - (Z_NamePlusRecord **) odr_malloc(a->encode, sizeof(*list) * toget); records->which = Z_Records_DBOSD; records->u.databaseOrSurDiagnostics = reclist; reclist->num_records = 0; - reclist->records = list; + + if (toget < 0) + return diagrec(a, YAZ_BIB1_PRESENT_REQUEST_OUT_OF_RANGE, 0); + else if (toget == 0) + reclist->records = odr_nullval(); + else + reclist->records = (Z_NamePlusRecord **) + odr_malloc(a->encode, sizeof(*reclist->records) * toget); + *pres = Z_PresentStatus_success; *num = 0; *next = 0;