/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1998-2004 The OpenLDAP Foundation.
+ * Copyright 1998-2005 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
#include "slap.h"
-#ifdef LDAP_COMP_MATCH
-extern free_component_func* component_destructor;
-#endif
void
attr_free( Attribute *a )
{
- if ( a->a_nvals && a->a_nvals != a->a_vals )
+ if ( a->a_nvals && a->a_nvals != a->a_vals ) {
ber_bvarray_free( a->a_nvals );
+ }
ber_bvarray_free( a->a_vals );
+ free( a );
+}
+
#ifdef LDAP_COMP_MATCH
- if ( component_destructor && a->a_comp_data && a->a_comp_data->cd_mem_op ) {
- component_destructor( a->a_comp_data->cd_mem_op );
- free ( a->a_comp_data );
+void
+comp_tree_free( Attribute *a )
+{
+ Attribute *next;
+
+ for( ; a != NULL ; a = next ) {
+ next = a->a_next;
+ if ( component_destructor && a->a_comp_data ) {
+ if ( a->a_comp_data->cd_mem_op )
+ component_destructor( a->a_comp_data->cd_mem_op );
+ free ( a->a_comp_data );
+ }
}
-#endif
- free( a );
}
+#endif
void
attrs_free( Attribute *a )