/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1998-2009 The OpenLDAP Foundation.
+ * Copyright 1998-2010 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
c->value_string = ch_strdup(*(char **)ptr);
break;
case ARG_BERVAL:
- ber_dupbv( &c->value_bv, (struct berval *)ptr ); break;
+ c->value_bv = *((struct berval *)ptr); break;
case ARG_ATDESC:
c->value_ad = *(AttributeDescription **)ptr; break;
}
}
*sk = sk2;
+
+ ber_memfree( val->bv_val );
+ BER_BVZERO( val );
}
return 0;
break;
case 'x':
- *ptr++ = ' ';
- ptr = lutil_strcopy( ptr, tab->key.bv_val );
- if ( tab->quote ) *ptr++ = '"';
- if ( tab->aux != NULL ) {
- struct berval value;
- slap_cf_aux_table_parse_x *func = (slap_cf_aux_table_parse_x *)tab->aux;
- int rc;
+ {
+ char *saveptr=ptr;
+ *ptr++ = ' ';
+ ptr = lutil_strcopy( ptr, tab->key.bv_val );
+ if ( tab->quote ) *ptr++ = '"';
+ if ( tab->aux != NULL ) {
+ struct berval value;
+ slap_cf_aux_table_parse_x *func = (slap_cf_aux_table_parse_x *)tab->aux;
+ int rc;
- value.bv_val = ptr;
- value.bv_len = buf + sizeof( buf ) - ptr;
+ value.bv_val = ptr;
+ value.bv_len = buf + sizeof( buf ) - ptr;
- rc = func( &value, (void *)((char *)src + tab->off), tab, "(unparse)", 1 );
- if ( rc == 0 ) {
- ptr += value.bv_len;
+ rc = func( &value, (void *)((char *)src + tab->off), tab, "(unparse)", 1 );
+ if ( rc == 0 ) {
+ if (value.bv_len) {
+ ptr += value.bv_len;
+ } else {
+ ptr = saveptr;
+ break;
+ }
+ }
}
+ if ( tab->quote ) *ptr++ = '"';
}
- if ( tab->quote ) *ptr++ = '"';
break;
default: