- if (grep_info_prepare(zh, zapt, &grep_info, reg_type, stream))
- return 0;
- for (; rset_no < sizeof(rset)/sizeof(*rset); rset_no++)
- {
- yaz_log(log_level_rpn, "APT_and_list termp=%s", termp);
- rset[rset_no] = term_trunc(zh, zapt, &termp, attributeSet,
- stream, &grep_info,
- reg_type, complete_flag,
- num_bases, basenames,
- term_dst, rank_type,
- xpath_use, rset_nmem);
- if (!rset[rset_no]) /* error or no more terms */
- break;
- }
- grep_info_delete (&grep_info);
- if (termp)
- {
- int i;
- for (i = 0; i<rset_no; i++)
- rset_delete(rset[i]);
- return 0;
- }
- if (rset_no == 0)
- return rsnull_create(rset_nmem, key_it_ctrl);
-
- return rsmulti_and_create(rset_nmem, key_it_ctrl, key_it_ctrl->scope,
- rset_no, rset);
+static ZEBRA_RES rpn_search_APT_and_list(ZebraHandle zh,
+ Z_AttributesPlusTerm *zapt,
+ const char *termz_org,
+ oid_value attributeSet,
+ NMEM stream,
+ int reg_type, int complete_flag,
+ const char *rank_type,
+ int xpath_use,
+ int num_bases, char **basenames,
+ NMEM rset_nmem,
+ RSET *rset,
+ struct rset_key_control *kc)
+{
+ RSET *result_sets = 0;
+ int num_result_sets = 0;
+ ZEBRA_RES res =
+ term_list_trunc(zh, zapt, termz_org, attributeSet,
+ stream, reg_type, complete_flag,
+ rank_type, xpath_use,
+ num_bases, basenames,
+ rset_nmem,
+ &result_sets, &num_result_sets,
+ kc);
+ if (res != ZEBRA_OK)
+ return res;
+ if (num_result_sets == 0)
+ *rset = rsnull_create (rset_nmem, kc);
+ else if (num_result_sets == 1)
+ *rset = result_sets[0];
+ else
+ *rset = rsmulti_and_create(rset_nmem, kc, kc->scope,
+ num_result_sets, result_sets);
+ if (!*rset)
+ return ZEBRA_FAIL;
+ return ZEBRA_OK;