X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Fliblber%2Fmemory.c;h=d836dcc6eab3ad0f55b38c7cc14bde3e0b01369e;hb=5f28673792d67dbd5b9636cf6cda4eb72432712a;hp=309fbeab778dbd06886f0f6771063a1fda5813e6;hpb=978e417699699579fb0b858ad485f36399220c4d;p=openldap diff --git a/libraries/liblber/memory.c b/libraries/liblber/memory.c index 309fbeab77..d836dcc6ea 100644 --- a/libraries/liblber/memory.c +++ b/libraries/liblber/memory.c @@ -401,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; @@ -422,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 */; } @@ -563,3 +563,56 @@ ber_strdup( LDAP_CONST char *s ) 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 ); + p[ len ] = '\0'; + return p; +}