1/*
2 *
3 * Portions Copyright 1999 Sun Microsystems, Inc.  All rights reserved.
4 * Use is subject to license terms.
5 *
6 */
7
8#pragma ident	"%Z%%M%	%I%	%E% SMI"
9
10/*
11 *  Copyright (c) 1994 The Regents of the University of Michigan.
12 *  All rights reserved.
13 *
14 *  free.c - some free routines are included here to avoid having to
15 *           link in lots of extra code when not using certain features
16 */
17
18#ifndef lint
19static char copyright[] = "@(#) Copyright (c) 1994 The Regents of the University of Michigan.\nAll rights reserved.\n";
20#endif
21
22
23#include <stdio.h>
24#include <string.h>
25#include <ctype.h>
26#ifdef MACOS
27#include <stdlib.h>
28#include "macos.h"
29#else /* MACOS */
30#ifdef DOS
31#include <malloc.h>
32#include "msdos.h"
33#else /* DOS */
34#include <sys/types.h>
35#include <stdlib.h>
36#endif /* DOS */
37#endif /* MACOS */
38
39#include "lber.h"
40#include "ldap.h"
41#include "ldap-private.h"
42
43void
44ldap_getfilter_free( LDAPFiltDesc *lfdp )
45{
46    LDAPFiltList	*flp, *nextflp;
47    LDAPFiltInfo	*fip, *nextfip;
48
49    for ( flp = lfdp->lfd_filtlist; flp != NULL; flp = nextflp ) {
50	for ( fip = flp->lfl_ilist; fip != NULL; fip = nextfip ) {
51	    nextfip = fip->lfi_next;
52	    free( fip->lfi_filter );
53	    free( fip->lfi_desc );
54	    free( fip );
55	}
56	nextflp = flp->lfl_next;
57	free( flp->lfl_pattern );
58	free( flp->lfl_delims );
59	free( flp->lfl_tag );
60	free( flp );
61    }
62
63    if ( lfdp->lfd_curvalcopy != NULL ) {
64	free( lfdp->lfd_curvalcopy );
65    }
66    if ( lfdp->lfd_curvalwords != NULL ) {
67	free( lfdp->lfd_curvalwords );
68    }
69    if ( lfdp->lfd_filtprefix != NULL ) {
70	free( lfdp->lfd_filtprefix );
71    }
72    if ( lfdp->lfd_filtsuffix != NULL ) {
73	free( lfdp->lfd_filtsuffix );
74    }
75
76    free( lfdp );
77}
78
79/*
80 * free a null-terminated array of pointers to mod structures. the
81 * structures are freed, not the array itself, unless the freemods
82 * flag is set.
83 */
84
85void
86ldap_mods_free( LDAPMod **mods, int freemods )
87{
88	int	i;
89
90	if ( mods == NULL )
91		return;
92
93	for ( i = 0; mods[i] != NULL; i++ ) {
94		if ( mods[i]->mod_op & LDAP_MOD_BVALUES ) {
95			ber_bvecfree( mods[i]->mod_bvalues );
96		} else {
97			ldap_value_free( mods[i]->mod_values );
98		}
99		if (mods[i]->mod_type)
100			free(mods[i]->mod_type);
101		free( (char *) mods[i] );
102	}
103
104	if ( freemods )
105		free( (char *) mods );
106}
107