bool Index::get_value_list(primary_key pk, const common::field_list_t &fl, common::value_list_t &vl, common::ExecutionContext &ctx) const { if (!opened_) { return false; } return get_value_list(fi_->get_docid(pk), fl, vl, ctx); }
enum param_err fetch_value( PPARAMETER pParams, int count, const char *key, enum param_type type, void *val, const void *def ) { const char *value; NTSTATUS status; char **valstr, **defstr; char *valchar, *defchar; wchar16_t **valw16str; wchar16_t ***valw16str_list; int *valint, *defint; unsigned int *valuint, *defuint; PSID* valsid = NULL; PSID** valsid_list = NULL; char **strlist = NULL; enum param_err ret = perr_success; int i = 0; if (pParams && !key) return perr_nullptr_passed; if (!val) return perr_invalid_out_param; value = find_value(pParams, count, key); if (!value && !def) return perr_not_found; switch (type) { case pt_string: valstr = (char**)val; defstr = (char**)def; *valstr = (value) ? strdup(value) : strdup(*defstr); break; case pt_w16string: valw16str = (wchar16_t**)val; defstr = (char**)def; *valw16str = (value) ? ambstowc16s(value) : ambstowc16s(*defstr); break; case pt_w16string_list: valw16str_list = (wchar16_t***)val; defstr = (char**)def; strlist = (value) ? get_value_list(value) : get_value_list(*defstr); *valw16str_list = create_wc16str_list(strlist); if (*valw16str_list == NULL) ret = perr_invalid_out_param; break; case pt_char: valchar = (char*)val; defchar = (char*)def; *valchar = (value) ? value[0] : *defchar; break; case pt_int32: valint = (int*)val; defint = (int*)def; *valint = (value) ? atoi(value) : *defint; break; case pt_uint32: valuint = (unsigned int*)val; defuint = (unsigned int*)def; *valuint = (unsigned int)((value) ? atol(value) : *defuint); break; case pt_sid: valsid = (PSID*)val; defstr = (char**)def; status = RtlAllocateSidFromCString(valsid, ((value) ? (const char*)value : *defstr)); if (status != STATUS_SUCCESS) ret = perr_invalid_out_param; break; case pt_sid_list: valsid_list = (PSID**)val; defstr = (char**)def; strlist = get_value_list((value) ? (const char*)value : *defstr); *valsid_list = create_sid_list(strlist); if (*valsid_list == NULL) ret = perr_invalid_out_param; break; default: ret = perr_unknown_type; break; } if (strlist) { i = 0; while (strlist[i]) { free(strlist[i++]); } free(strlist); } return ret; }