X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Fliblber%2Fmemory.c;h=b8692e1d576d19f1652715645628e261351212a0;hb=63bdcda971db7d4b806c32197637b0e62413472d;hp=8cdad0ec8b0a7bee67d9fedd2c550d92b978eaf1;hpb=ac1332cdb868b6a30f545796aca8e0bbf13fe939;p=openldap diff --git a/libraries/liblber/memory.c b/libraries/liblber/memory.c index 8cdad0ec8b..b8692e1d57 100644 --- a/libraries/liblber/memory.c +++ b/libraries/liblber/memory.c @@ -523,6 +523,46 @@ ber_str2bv( return( new ); } +struct berval * +ber_mem2bv( + LDAP_CONST char *s, ber_len_t len, int dup, struct berval *bv) +{ + struct berval *new; + + ber_int_options.lbo_valid = LBER_INITIALIZED; + + if( s == NULL || len == 0 ) { + ber_errno = LBER_ERROR_PARAM; + return NULL; + } + + if( bv ) { + new = bv; + } else { + if(( new = LBER_MALLOC( sizeof(struct berval) )) == NULL ) { + ber_errno = LBER_ERROR_MEMORY; + return NULL; + } + } + + new->bv_len = len; + if ( dup ) { + if ( (new->bv_val = LBER_MALLOC( new->bv_len+1 )) == NULL ) { + ber_errno = LBER_ERROR_MEMORY; + if ( !bv ) + LBER_FREE( new ); + return NULL; + } + + AC_MEMCPY( new->bv_val, s, new->bv_len ); + new->bv_val[new->bv_len] = '\0'; + } else { + new->bv_val = (char *) s; + } + + return( new ); +} + char * ber_strdup( LDAP_CONST char *s ) {