+ Z_NamePlusRecordList *npr_res = 0;
+ // record_cache.lookup types are int's. Avoid non-fitting values
+ if (*req->resultSetStartPoint > 0
+ && *req->resultSetStartPoint < INT_MAX
+ && *req->numberOfRecordsRequested > 0
+ && *req->numberOfRecordsRequested < INT_MAX
+ && found_set->m_record_cache.lookup(odr, &npr_res,
+ *req->resultSetStartPoint,
+ *req->numberOfRecordsRequested,
+ req->preferredRecordSyntax,
+ req->recordComposition))
+ {
+ Z_APDU *f_apdu_res = odr.create_presentResponse(apdu_req, 0, 0);
+ Z_PresentResponse *f_resp = f_apdu_res->u.presentResponse;
+
+ yaz_log(YLOG_LOG, "Found " ODR_INT_PRINTF "+" ODR_INT_PRINTF
+ " records in cache %p",
+ *req->resultSetStartPoint,
+ *req->numberOfRecordsRequested,
+ &found_set->m_record_cache);
+
+ *f_resp->numberOfRecordsReturned = *req->numberOfRecordsRequested;
+ *f_resp->nextResultSetPosition =
+ *req->resultSetStartPoint + *req->numberOfRecordsRequested;
+ // f_resp->presentStatus assumed OK.
+ f_resp->records = (Z_Records *) odr_malloc(odr, sizeof(Z_Records));
+ f_resp->records->which = Z_Records_DBOSD;
+ f_resp->records->u.databaseOrSurDiagnostics = npr_res;
+ package.response() = f_apdu_res;
+ bc->release_backend(found_backend);
+ return;
+ }
+
+ found_backend->timestamp();
+