1 /*
2 * The contents of this file are subject to the Netscape Public
3 * License Version 1.1 (the "License"); you may not use this file
4 * except in compliance with the License. You may obtain a copy of
5 * the License at http://www.mozilla.org/NPL/
6 *
7 * Software distributed under the License is distributed on an "AS
8 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
9 * implied. See the License for the specific language governing
10 * rights and limitations under the License.
11 *
12 * The Original Code is Mozilla Communicator client code, released
13 * March 31, 1998.
14 *
15 * The Initial Developer of the Original Code is Netscape
16 * Communications Corporation. Portions created by Netscape are
17 * Copyright (C) 1998-1999 Netscape Communications Corporation. All
18 * Rights Reserved.
19 *
20 * Contributor(s):
21 */
22 /*
23 * Copyright (c) 1994 The Regents of the University of Michigan.
24 * All rights reserved.
25 */
26 /*
27 * free.c - some free routines are included here to avoid having to
28 * link in lots of extra code when not using certain features
29 */
30
31 #if 0
32 #ifndef lint
33 static char copyright[] = "@(#) Copyright (c) 1994 The Regents of the University of Michigan.\nAll rights reserved.\n";
34 #endif
35 #endif
36
37 #include "ldap-int.h"
38
39 void
40 LDAP_CALL
ldap_getfilter_free(LDAPFiltDesc * lfdp)41 ldap_getfilter_free( LDAPFiltDesc *lfdp )
42 {
43 LDAPFiltList *flp, *nextflp;
44 LDAPFiltInfo *fip, *nextfip;
45
46 if ( lfdp == NULL ) {
47 return;
48 }
49
50 for ( flp = lfdp->lfd_filtlist; flp != NULL; flp = nextflp ) {
51 for ( fip = flp->lfl_ilist; fip != NULL; fip = nextfip ) {
52 nextfip = fip->lfi_next;
53 NSLDAPI_FREE( fip->lfi_filter );
54 NSLDAPI_FREE( fip->lfi_desc );
55 NSLDAPI_FREE( fip );
56 }
57 nextflp = flp->lfl_next;
58 NSLDAPI_FREE( flp->lfl_pattern );
59 NSLDAPI_FREE( flp->lfl_delims );
60 NSLDAPI_FREE( flp->lfl_tag );
61 NSLDAPI_FREE( flp );
62 }
63
64 if ( lfdp->lfd_curvalcopy != NULL ) {
65 NSLDAPI_FREE( lfdp->lfd_curvalcopy );
66 }
67 if ( lfdp->lfd_curvalwords != NULL ) {
68 NSLDAPI_FREE( lfdp->lfd_curvalwords );
69 }
70 if ( lfdp->lfd_filtprefix != NULL ) {
71 NSLDAPI_FREE( lfdp->lfd_filtprefix );
72 }
73 if ( lfdp->lfd_filtsuffix != NULL ) {
74 NSLDAPI_FREE( lfdp->lfd_filtsuffix );
75 }
76
77 NSLDAPI_FREE( lfdp );
78 }
79
80
81 /*
82 * free a null-terminated array of pointers to mod structures. the
83 * structures are freed, not the array itself, unless the freemods
84 * flag is set.
85 */
86 void
87 LDAP_CALL
ldap_mods_free(LDAPMod ** mods,int freemods)88 ldap_mods_free( LDAPMod **mods, int freemods )
89 {
90 int i;
91
92 if ( !NSLDAPI_VALID_LDAPMOD_ARRAY( mods )) {
93 return;
94 }
95
96 for ( i = 0; mods[i] != NULL; i++ ) {
97 if ( mods[i]->mod_op & LDAP_MOD_BVALUES ) {
98 if ( mods[i]->mod_bvalues != NULL ) {
99 ber_bvecfree( mods[i]->mod_bvalues );
100 }
101 } else if ( mods[i]->mod_values != NULL ) {
102 ldap_value_free( mods[i]->mod_values );
103 }
104 if ( mods[i]->mod_type != NULL ) {
105 NSLDAPI_FREE( mods[i]->mod_type );
106 }
107 NSLDAPI_FREE( (char *) mods[i] );
108 }
109
110 if ( freemods )
111 NSLDAPI_FREE( (char *) mods );
112 }
113
114
115 /*
116 * ldap_memfree() is needed to ensure that memory allocated by the C runtime
117 * assocated with libldap is freed by the same runtime code.
118 */
119 void
120 LDAP_CALL
ldap_memfree(void * s)121 ldap_memfree( void *s )
122 {
123 if ( s != NULL ) {
124 NSLDAPI_FREE( s );
125 }
126 }
127
128
129 /*
130 * ldap_ber_free() is just a cover for ber_free()
131 * ber_free() checks for ber == NULL, so we don't bother.
132 */
133 void
134 LDAP_CALL
ldap_ber_free(BerElement * ber,int freebuf)135 ldap_ber_free( BerElement *ber, int freebuf )
136 {
137 ber_free( ber, freebuf );
138 }
139