X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fcharray.c;h=e8c3dbc048d1f74a11d5f6de7b8334c8bfceef64;hb=804490a8b12a94a19e7c1a8710a7d8a2fb7d5477;hp=2b628d7bbb5e63b7e281bbb4b24feb0a60d455ca;hpb=0e2af54a3ffdeebe3901370683be56fcc53023b0;p=openldap diff --git a/servers/slapd/charray.c b/servers/slapd/charray.c index 2b628d7bbb..e8c3dbc048 100644 --- a/servers/slapd/charray.c +++ b/servers/slapd/charray.c @@ -188,7 +188,7 @@ charray_strcmp( const char **a1, const char **a2 ) } } - if ( ! ( a1[0] && a2[0] ) ) { + if ( a1[0] || a2[0] ) { return( !0 ); } @@ -205,7 +205,7 @@ charray_strcasecmp( const char **a1, const char **a2 ) } } - if ( ! ( a1[0] && a2[0] ) ) { + if ( a1[0] || a2[0] ) { return( !0 ); } @@ -225,51 +225,24 @@ slap_strcopy( if (!a || !b) return a; - while (*a++ = *b++) ; + while ((*a++ = *b++)) ; return a-1; } -/* Unlike charray_add, bvarray_add does not make a new copy of the - * source string. Typically it is used where ber_bvecadd was before, - * and ber_bvecadd didn't duplicate its source either. +/* 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. */ -int -bvarray_add( - struct berval **a, - struct berval *bv -) -{ - int n; - - if ( *a == NULL ) { - *a = (struct berval *) ch_malloc( 2 * sizeof(struct berval) ); - n = 0; - } else { - for ( n = 0; *a != NULL && (*a)[n].bv_val != NULL; n++ ) { - ; /* NULL */ - } - - *a = (struct berval *) ch_realloc( (char *) *a, - (n + 2) * sizeof(struct berval) ); - } - if ( *a == NULL ) return -1; - - (*a)[n++] = *bv; - (*a)[n].bv_val = NULL; - - return 0; -} - -void -bvarray_free( - struct berval *a +char * +slap_strncopy( + char *a, + const char *b, + size_t n ) { - int i; - - if (a) { - for (i=0; a[i].bv_val; i++) - free(a[i].bv_val); - free(a); - } + if (!a || !b || n == 0) + return a; + + while ((*a++ = *b++) && n-- > 0) ; + return a-1; }