static int op_filter_match (or_filter_t* or, struct berval** vals) { auto indexer_t* ix = or->or_indexer; auto struct berval** v = ix->ix_index (ix, vals, NULL); if (v != NULL) for (; *v; ++v) { auto struct berval** k = or->or_match_keys; if (k != NULL) for (; *k; ++k) { switch (or->or_op) { case SLAPI_OP_LESS: if (slapi_berval_cmp (*v, *k) < 0) return 0; break; case SLAPI_OP_LESS_OR_EQUAL: if (slapi_berval_cmp (*v, *k) <= 0) return 0; break; case SLAPI_OP_EQUAL: if (SLAPI_BERVAL_EQ (*v, *k)) return 0; break; case SLAPI_OP_GREATER_OR_EQUAL: if (slapi_berval_cmp (*v, *k) >= 0) return 0; break; case SLAPI_OP_GREATER: if (slapi_berval_cmp (*v, *k) > 0) return 0; break; default: break; } } } return -1; }
/* * Subtract bvalues from value array * return value: subtracted count */ int valuearray_subtract_bvalues(Slapi_Value **va, struct berval **bvals) { Slapi_Value **vap; struct berval **bvp; int rv = 0; if (NULL == va || NULL == *va || NULL == bvals || NULL == *bvals) { return rv; /* No op */ } for (vap = va; vap && *vap; vap++) { for (bvp = bvals; bvp && *bvp; bvp++) { if (0 == slapi_berval_cmp(&(*vap)->bv, *bvp)) { Slapi_Value **vapp; slapi_value_free(vap); for (vapp = vap; vapp && *vapp; vapp++) { *vapp = *(vapp + 1); } vapp++; rv++; } } } return rv; }