memset( bsi->bsi_e, 0, sizeof( Entry ) );
if ( bi->sql_baseObject && BACKSQL_IS_BASEOBJECT_ID( &eid->eid_id ) ) {
- Entry *e;
-
- e = entry_dup( bi->sql_baseObject );
- if ( e == NULL ) {
- return LDAP_NO_MEMORY;
+ rc = entry_dup_to( bi->sql_baseObject, bsi->bsi_e );
+ if ( rc != LDAP_SUCCESS ) {
+ return rc;
}
- *bsi->bsi_e = *e;
- free( e );
goto done;
}
return 0;
}
+int entry_dup_to( Entry *source, Entry *dest )
+{
+ dest->e_id = source->e_id;
+ ber_dupbv( &dest->e_name, &source->e_name );
+ ber_dupbv( &dest->e_nname, &source->e_nname );
+ dest->e_attrs = attrs_dup( source->e_attrs );
+ dest->e_ocflags = source->e_ocflags;
+ return LDAP_SUCCESS;
+}
+
Entry *entry_dup( Entry *e )
{
Entry *ret;
ret = entry_alloc();
-
- ret->e_id = e->e_id;
- ber_dupbv( &ret->e_name, &e->e_name );
- ber_dupbv( &ret->e_nname, &e->e_nname );
- ret->e_attrs = attrs_dup( e->e_attrs );
- ret->e_ocflags = e->e_ocflags;
+ entry_dup_to(e, ret);
return ret;
}
LDAP_SLAPD_F (int) entry_dn_cmp LDAP_P(( const void *v_a, const void *v_b ));
LDAP_SLAPD_F (int) entry_id_cmp LDAP_P(( const void *v_a, const void *v_b ));
LDAP_SLAPD_F (Entry *) entry_dup LDAP_P(( Entry *e ));
+LDAP_SLAPD_F (int) entry_dup_to LDAP_P(( Entry *src, Entry *dest ));
LDAP_SLAPD_F (Entry *) entry_dup_bv LDAP_P(( Entry *e ));
LDAP_SLAPD_F (Entry *) entry_alloc LDAP_P((void));
LDAP_SLAPD_F (int) entry_prealloc LDAP_P((int num));