for ( p = i = 0; !BER_BVISNULL( &mod->sm_values[i] ); i++ ) {
int match;
- assert( a->a_vals[0].bv_val );
+ assert( a->a_vals[0].bv_val != NULL );
for ( j = 0; !BER_BVISNULL( &a->a_vals[j] ); j++ ) {
if ( mod->sm_nvalues ) {
rc = ordered_value_match( &match, mod->sm_desc, mr,
}
/* no - add them */
- if ( mod->sm_desc->ad_type->sat_flags & SLAP_AT_ORDERED ) {
+ if ( mod->sm_desc->ad_type->sat_flags & SLAP_AT_ORDERED_VAL ) {
rc = ordered_value_add( e, mod->sm_desc, a,
pmod.sm_values, pmod.sm_nvalues );
} else {
int
modify_delete_values(
+ Entry *e,
+ Modification *m,
+ int perm,
+ const char **text,
+ char *textbuf, size_t textlen )
+{
+ return modify_delete_vindex( e, m, perm, text, textbuf, textlen, NULL );
+}
+
+int
+modify_delete_vindex(
Entry *e,
Modification *mod,
int permissive,
const char **text,
- char *textbuf, size_t textlen )
+ char *textbuf, size_t textlen,
+ int *idx )
{
int i, j, k, rc = LDAP_SUCCESS;
Attribute *a;
}
if( mod->sm_nvalues ) {
- assert( a->a_nvals );
+ assert( a->a_nvals != NULL );
rc = ordered_value_match( &match, a->a_desc, mr,
SLAP_MR_EQUALITY | SLAP_MR_VALUE_OF_ASSERTION_SYNTAX
| SLAP_MR_ASSERTED_VALUE_NORMALIZED_MATCH
found = 1;
+ if ( idx )
+ idx[i] = j;
+
/* delete value and mark it as dummy */
free( a->a_vals[j].bv_val );
a->a_vals[j].bv_val = &dummy;
mod->sm_desc->ad_cname.bv_val );
rc = LDAP_NO_SUCH_ATTRIBUTE;
}
- } else if ( a->a_desc->ad_type->sat_flags & SLAP_AT_ORDERED ) {
+ } else if ( a->a_desc->ad_type->sat_flags & SLAP_AT_ORDERED_VAL ) {
/* For an ordered attribute, renumber the value indices */
ordered_value_sort( a, 1 );
}
void
slap_mods_free(
- Modifications *ml )
+ Modifications *ml,
+ int freevals )
{
Modifications *next;
for ( ; ml != NULL; ml = next ) {
next = ml->sml_next;
- slap_mod_free( &ml->sml_mod, 0 );
+ if ( freevals )
+ slap_mod_free( &ml->sml_mod, 0 );
free( ml );
}
}