diff --git a/libraries/liblber/decode.c b/libraries/liblber/decode.c index 67959921bf..69ce1eac1e 100644 --- a/libraries/liblber/decode.c +++ b/libraries/liblber/decode.c @@ -745,69 +745,6 @@ va_dcl return( rc ); } -void -ber_bvfree( struct berval *bv ) -{ - assert(bv != NULL); /* bv damn better point to something */ - - ber_int_options.lbo_valid = LBER_INITIALIZED; - - if ( bv->bv_val != NULL ) - LBER_FREE( bv->bv_val ); - LBER_FREE( (char *) bv ); -} - -void -ber_bvecfree( struct berval **bv ) -{ - int i; - - assert(bv != NULL); /* bv damn better point to something */ - - ber_int_options.lbo_valid = LBER_INITIALIZED; - - for ( i = 0; bv[i] != NULL; i++ ) - ber_bvfree( bv[i] ); - LBER_FREE( (char *) bv ); -} - -struct berval * -ber_bvdup( - LDAP_CONST struct berval *bv ) -{ - struct berval *new; - - assert( bv != NULL ); - - ber_int_options.lbo_valid = LBER_INITIALIZED; - - if( bv == NULL ) { - return NULL; - } - - if ( (new = (struct berval *) LBER_MALLOC( sizeof(struct berval) )) - == NULL ) { - return( NULL ); - } - - if ( bv->bv_val == NULL ) { - new->bv_val = NULL; - new->bv_len = 0; - return ( new ); - } - - if ( (new->bv_val = (char *) LBER_MALLOC( bv->bv_len + 1 )) == NULL ) { - LBER_FREE( new ); - return( NULL ); - } - - SAFEMEMCPY( new->bv_val, bv->bv_val, (size_t) bv->bv_len ); - new->bv_val[bv->bv_len] = '\0'; - new->bv_len = bv->bv_len; - - return( new ); -} - #ifdef STR_TRANSLATION void diff --git a/libraries/liblber/lber-int.h b/libraries/liblber/lber-int.h index a64f2d3a17..5ab2dc21a9 100644 --- a/libraries/liblber/lber-int.h +++ b/libraries/liblber/lber-int.h @@ -199,11 +199,13 @@ extern BerMemoryFunctions* ber_int_memory_fns; #define LBER_INT_CALLOC(n,s) ber_memcalloc((n),(s)) #define LBER_INT_REALLOC(p,s) ber_memrealloc((p),(s)) #define LBER_INT_FREE(p) ber_memfree((p)) +#define LBER_INT_VFREE(v) ber_memvfree((v)) #define LBER_MALLOC(s) ber_memalloc((s)) #define LBER_CALLOC(n,s) ber_memcalloc((n),(s)) #define LBER_REALLOC(p,s) ber_memrealloc((p),(s)) #define LBER_FREE(p) ber_memfree((p)) +#define LBER_VFREE(v) ber_memvfree((v)) /* sockbuf.c */ diff --git a/libraries/liblber/memory.c b/libraries/liblber/memory.c index 59e2258d3c..5c3910f44a 100644 --- a/libraries/liblber/memory.c +++ b/libraries/liblber/memory.c @@ -11,6 +11,7 @@ BerMemoryFunctions *ber_int_memory_fns = NULL; + void ber_memfree( void *p ) { @@ -34,6 +35,22 @@ ber_memfree( void *p ) (*ber_int_memory_fns->bmf_free)( p ); } + +void +ber_memvfree( void **vec ) +{ + int i; + + assert(vec != NULL); /* vec damn better point to something */ + + for ( i = 0; vec[i] != NULL; i++ ) { + LBER_FREE( vec[i] ); + } + + LBER_FREE( vec ); +} + + void * ber_memalloc( size_t s ) { @@ -56,6 +73,7 @@ ber_memalloc( size_t s ) return (*ber_int_memory_fns->bmf_malloc)( s ); } + void * ber_memcalloc( size_t n, size_t s ) { @@ -78,6 +96,7 @@ ber_memcalloc( size_t n, size_t s ) return (*ber_int_memory_fns->bmf_calloc)( n, s ); } + void * ber_memrealloc( void* p, size_t s ) { @@ -103,3 +122,70 @@ ber_memrealloc( void* p, size_t s ) return (*ber_int_memory_fns->bmf_realloc)( p, s ); } + +void +ber_bvfree( struct berval *bv ) +{ + assert(bv != NULL); /* bv damn better point to something */ + + ber_int_options.lbo_valid = LBER_INITIALIZED; + + if ( bv->bv_val != NULL ) + LBER_FREE( bv->bv_val ); + + LBER_FREE( (char *) bv ); +} + + +void +ber_bvecfree( struct berval **bv ) +{ + int i; + + assert(bv != NULL); /* bv damn better point to something */ + + ber_int_options.lbo_valid = LBER_INITIALIZED; + + for ( i = 0; bv[i] != NULL; i++ ) + ber_bvfree( bv[i] ); + + LBER_FREE( (char *) bv ); +} + + +struct berval * +ber_bvdup( + LDAP_CONST struct berval *bv ) +{ + struct berval *new; + + assert( bv != NULL ); + + ber_int_options.lbo_valid = LBER_INITIALIZED; + + if( bv == NULL ) { + return NULL; + } + + + if(( new = LBER_MALLOC( sizeof(struct berval) )) == NULL ) { + return NULL; + } + + if ( bv->bv_val == NULL ) { + new->bv_val = NULL; + new->bv_len = 0; + return new; + } + + if(( new->bv_val = LBER_MALLOC( bv->bv_len + 1 )) == NULL ) { + LBER_FREE( new ); + return NULL; + } + + SAFEMEMCPY( new->bv_val, bv->bv_val, (size_t) bv->bv_len ); + new->bv_val[bv->bv_len] = '\0'; + new->bv_len = bv->bv_len; + + return( new ); +}