X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fcharray.c;h=768c167fd53c43c72da28424f3f29fbb298cafb0;hb=3d9377f76404965d483c210a95e4e55386ff98a3;hp=9476616c12dca96c79159e72499a8b9d4ad9053b;hpb=2a3dc7ab8feae3c44ac92d2b1caf6bf86abd56ac;p=openldap diff --git a/servers/slapd/charray.c b/servers/slapd/charray.c index 9476616c12..768c167fd5 100644 --- a/servers/slapd/charray.c +++ b/servers/slapd/charray.c @@ -1,7 +1,7 @@ /* charray.c - routines for dealing with char * arrays */ /* $OpenLDAP$ */ /* - * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ @@ -124,26 +124,6 @@ charray_inlist( return( 0 ); } -int -bvec_inlist( - struct berval **a, - struct berval *s -) -{ - int i; - - if( a == NULL ) return 0; - - for ( i = 0; a[i] != NULL; i++ ) { - if ( a[i]->bv_len != s->bv_len) continue; - if ( strcasecmp( s->bv_val, a[i]->bv_val ) == 0 ) { - return( 1 ); - } - } - - return( 0 ); -} - char ** charray_dup( char **a ) { @@ -199,53 +179,6 @@ str2charray( const char *str_in, const char *brkstr ) return( res ); } -/* Convert a delimited string into an array of bervals; Add on - * to an existing array if it was given. - */ -struct berval ** -str2bvec( struct berval **vec, const char *in, const char *brkstr ) -{ - char *str; - struct berval **res; - char *s; - char *lasts; - int i, old; - - /* protect the input string from strtok */ - str = ch_strdup( in ); - - for (old = 0; vec && vec[old]; old++); - - i = 1; - for ( s = str; *s; s++ ) { - if ( strchr( brkstr, *s ) != NULL ) { - i++; - } - } - - if (vec) { - res = (struct berval **) ch_realloc( vec, (old + i + 1) * sizeof(struct berval *) ); - vec = res + old; - } else { - res = (struct berval **) ch_malloc( (i + 1) * sizeof(struct berval *) ); - vec = res; - } - i = 0; - - for ( s = ldap_pvt_strtok( str, brkstr, &lasts ); - s != NULL; - s = ldap_pvt_strtok( NULL, brkstr, &lasts ) ) - { - vec[i++] = ber_bvstrdup( s ); - } - - vec[i] = NULL; - - free( str ); - return( res ); -} - - int charray_strcmp( const char **a1, const char **a2 ) { @@ -286,7 +219,7 @@ charray_strcasecmp( const char **a1, const char **a2 ) char * slap_strcopy( char *a, - char *b + const char *b ) { if (!a || !b) @@ -295,3 +228,21 @@ slap_strcopy( while (*a++ = *b++) ; return a-1; } + +/* strncopy is like strcpy except it returns a pointer to the trailing NUL of + * the result string. This allows fast construction of catenated strings + * without the overhead of strlen/strcat. + */ +char * +slap_strncopy( + char *a, + const char *b, + size_t n +) +{ + if (!a || !b || n == 0) + return a; + + while ((*a++ = *b++) && n-- > 0) ; + return a-1; +}