Пример #1
0
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;
}
Пример #2
0
/*
 * 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;
}