X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Fliblber%2Fmemory.c;h=d836dcc6eab3ad0f55b38c7cc14bde3e0b01369e;hb=5f28673792d67dbd5b9636cf6cda4eb72432712a;hp=861dd3a23a127990c2806fb6fdf63ebf1e8e49e3;hpb=5b856458a259f83b9dd3182eb3a924b82cac4906;p=openldap diff --git a/libraries/liblber/memory.c b/libraries/liblber/memory.c index 861dd3a23a..d836dcc6ea 100644 --- a/libraries/liblber/memory.c +++ b/libraries/liblber/memory.c @@ -53,9 +53,9 @@ struct ber_mem_hdr { }; /* Pattern at top of allocated space */ -#define BER_MEM_JUNK 0xdeaddadaU +#define LLBER_MEM_JUNK 0xdeaddadaU -static const struct ber_mem_hdr ber_int_mem_hdr = { BER_MEM_JUNK, 0, 0 }; +static const struct ber_mem_hdr ber_int_mem_hdr = { LBER_MEM_JUNK, 0, 0 }; /* Note sequence and ber_int_options.lbu_meminuse are counters, but are not * thread safe. If you want to use these values for multithreaded applications, @@ -140,7 +140,7 @@ ber_memfree( void *p ) #ifdef LDAP_MEMORY_DEBUG struct ber_mem_hdr *mh = (struct ber_mem_hdr *) ((char *)p - sizeof(struct ber_mem_hdr)); - assert( mh->bm_top == BER_MEM_JUNK); + assert( mh->bm_top == LBER_MEM_JUNK); assert( testdatatop( mh)); assert( testend( (char *)&mh[1] + mh->bm_length) ); ber_int_options.lbo_meminuse -= mh->bm_length; @@ -150,7 +150,7 @@ ber_memfree( void *p ) mh->bm_sequence, mh, mh->bm_length, ber_int_options.lbo_meminuse); #endif /* Fill the free space with poison */ - memset( mh, 0xff, mh->bm_length + sizeof(struct ber_mem_hdr) + sizeof( ber_int_t)); + memset( mh, 0xff, mh->bm_length + sizeof(struct ber_mem_hdr) + sizeof(ber_int_t)); free( mh ); #else free( p ); @@ -204,7 +204,7 @@ ber_memalloc( ber_len_t s ) struct ber_mem_hdr *mh = malloc(s + sizeof(struct ber_mem_hdr) + sizeof( ber_int_t)); if( mh == NULL ) return NULL; - mh->bm_top = BER_MEM_JUNK; + mh->bm_top = LBER_MEM_JUNK; mh->bm_length = s; setdatatop( mh); setend( (char *)&mh[1] + mh->bm_length ); @@ -256,7 +256,7 @@ ber_memcalloc( ber_len_t n, ber_len_t s ) (n * s) + sizeof(struct ber_mem_hdr) + sizeof(ber_int_t) ); if( mh == NULL ) return NULL; - mh->bm_top = BER_MEM_JUNK; + mh->bm_top = LBER_MEM_JUNK; mh->bm_length = n*s; setdatatop( mh); setend( (char *)&mh[1] + mh->bm_length ); @@ -310,7 +310,7 @@ ber_memrealloc( void* p, ber_len_t s ) ber_int_t oldlen; struct ber_mem_hdr *mh = (struct ber_mem_hdr *) ((char *)p - sizeof(struct ber_mem_hdr)); - assert( mh->bm_top == BER_MEM_JUNK); + assert( mh->bm_top == LBER_MEM_JUNK); assert( testdatatop( mh)); assert( testend( (char *)&mh[1] + mh->bm_length) ); oldlen = mh->bm_length; @@ -329,7 +329,7 @@ ber_memrealloc( void* p, ber_len_t s ) memset( (char *)&mh[1] + oldlen, 0xff, s - oldlen); } - assert( mh->bm_top == BER_MEM_JUNK); + assert( mh->bm_top == LBER_MEM_JUNK); assert( testdatatop( mh)); ber_int_options.lbo_meminuse += s - oldlen; @@ -365,8 +365,9 @@ ber_bvfree( struct berval *bv ) BER_MEM_VALID( bv ); - if ( bv->bv_val != NULL ) + if ( bv->bv_val != NULL ) { LBER_FREE( bv->bv_val ); + } LBER_FREE( (char *) bv ); } @@ -385,8 +386,9 @@ ber_bvecfree( struct berval **bv ) BER_MEM_VALID( bv ); - for ( i = 0; bv[i] != NULL; i++ ) + for ( i = 0; bv[i] != NULL; i++ ) { ber_bvfree( bv[i] ); + } LBER_FREE( (char *) bv ); } @@ -399,7 +401,7 @@ ber_bvecadd( struct berval ***bvec, struct berval *bv ) ber_int_options.lbo_valid = LBER_INITIALIZED; - if( bvec == NULL ) { + if( *bvec == NULL ) { if( bv == NULL ) { /* nothing to add */ return 0; @@ -420,7 +422,7 @@ ber_bvecadd( struct berval ***bvec, struct berval *bv ) BER_MEM_VALID( bvec ); /* count entries */ - for ( i = 0; bvec[i] != NULL; i++ ) { + for ( i = 0; (*bvec)[i] != NULL; i++ ) { /* EMPTY */; } @@ -477,7 +479,7 @@ ber_bvdup( new->bv_val[bv->bv_len] = '\0'; new->bv_len = bv->bv_len; - return( new ); + return new; } struct berval * @@ -498,12 +500,6 @@ ber_bvstr( return NULL; } - if ( *s == '\0' ) { - new->bv_val = NULL; - new->bv_len = 0; - return new; - } - new->bv_val = (char *) s; new->bv_len = strlen( s ); @@ -537,7 +533,7 @@ ber_bvstrdup( LBER_FREE( p ); } - return( new ); + return new; } char * @@ -554,16 +550,69 @@ ber_strdup( LDAP_CONST char *s ) if( s == NULL ) { ber_errno = LBER_ERROR_PARAM; - return( NULL ); + return NULL; } len = strlen( s ) + 1; if ( (p = LBER_MALLOC( len )) == NULL ) { ber_errno = LBER_ERROR_MEMORY; - return( NULL ); + return NULL; + } + + AC_MEMCPY( p, s, len ); + return p; +} + +char * +ber_strndup( LDAP_CONST char *s, ber_len_t l ) +{ + char *p; + size_t len; + + ber_int_options.lbo_valid = LBER_INITIALIZED; + +#ifdef LDAP_MEMORY_DEBUG + assert(s != NULL); /* bv damn better point to something */ +#endif + + if( s == NULL ) { + ber_errno = LBER_ERROR_PARAM; + return NULL; + } + + len = strlen( s ); + + if ( len > l ) { + len = l; + } + + if ( (p = LBER_MALLOC( len + 1 )) == NULL ) { + ber_errno = LBER_ERROR_MEMORY; + return NULL; + } + + AC_MEMCPY( p, s, len ); + p[ len ] = '\0'; + return p; +} + +char * +ber_strndup__( LDAP_CONST char *s, size_t l ) +{ + char *p; + size_t len; + + if ( s == NULL ) { + return NULL; + } + + len = strlen( s ); + if (( p = LBER_MALLOC( len + 1 ) ) == NULL ) { + return NULL; } AC_MEMCPY( p, s, len ); - return( p ); + p[ len ] = '\0'; + return p; }