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: