1 /* $NetBSD: free.c,v 1.3 2021/08/14 16:14:56 christos Exp $ */
2
3 /* free.c */
4 /* $OpenLDAP$ */
5 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
6 *
7 * Copyright 1998-2021 The OpenLDAP Foundation.
8 * All rights reserved.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted only as authorized by the OpenLDAP
12 * Public License.
13 *
14 * A copy of this license is available in the file LICENSE in the
15 * top-level directory of the distribution or, alternatively, at
16 * <http://www.OpenLDAP.org/license.html>.
17 */
18 /* Portions Copyright (c) 1994 The Regents of the University of Michigan.
19 * All rights reserved.
20 */
21
22 /*
23 * free.c - some free routines are included here to avoid having to
24 * link in lots of extra code when not using certain features
25 */
26
27 #include <sys/cdefs.h>
28 __RCSID("$NetBSD: free.c,v 1.3 2021/08/14 16:14:56 christos Exp $");
29
30 #include "portable.h"
31
32 #include <stdio.h>
33 #include <ac/stdlib.h>
34
35 #include <ac/string.h>
36 #include <ac/time.h>
37
38 #include "ldap-int.h"
39
40 /*
41 * C-API deallocator
42 */
43 void
ldap_memfree(void * p)44 ldap_memfree( void *p )
45 {
46 LDAP_FREE( p );
47 }
48
49 void
ldap_memvfree(void ** v)50 ldap_memvfree( void **v )
51 {
52 LDAP_VFREE( v );
53 }
54
55 void *
ldap_memalloc(ber_len_t s)56 ldap_memalloc( ber_len_t s )
57 {
58 return LDAP_MALLOC( s );
59 }
60
61 void *
ldap_memcalloc(ber_len_t n,ber_len_t s)62 ldap_memcalloc( ber_len_t n, ber_len_t s )
63 {
64 return LDAP_CALLOC( n, s );
65 }
66
67 void *
ldap_memrealloc(void * p,ber_len_t s)68 ldap_memrealloc( void* p, ber_len_t s )
69 {
70 return LDAP_REALLOC( p, s );
71 }
72
73 char *
ldap_strdup(LDAP_CONST char * p)74 ldap_strdup( LDAP_CONST char *p )
75 {
76 return LDAP_STRDUP( p );
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
85 void
ldap_mods_free(LDAPMod ** mods,int freemods)86 ldap_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 if( mods[i]->mod_bvalues != NULL )
96 ber_bvecfree( mods[i]->mod_bvalues );
97
98 } else if( mods[i]->mod_values != NULL ) {
99 LDAP_VFREE( mods[i]->mod_values );
100 }
101
102 if ( mods[i]->mod_type != NULL ) {
103 LDAP_FREE( mods[i]->mod_type );
104 }
105
106 LDAP_FREE( (char *) mods[i] );
107 }
108
109 if ( freemods ) {
110 LDAP_FREE( (char *) mods );
111 }
112 }
113