/* 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
*/
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 )
{
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 )
{
}
}
- if ( ! ( a1[0] && a2[0] ) ) {
+ if ( a1[0] || a2[0] ) {
return( !0 );
}
}
}
- if ( ! ( a1[0] && a2[0] ) ) {
+ if ( a1[0] || a2[0] ) {
return( !0 );
}
if (!a || !b)
return a;
- while (*a++ = *b++) ;
+ while ((*a++ = *b++)) ;
return a-1;
}
-void
-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) );
- }
-
- ber_dupbv( (*a)+n, bv );
- n++;
- (*a)[n].bv_val = NULL;
-}
-
-void
-bvarray_free(
- struct berval *a
+/* 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
)
{
- int i;
-
- 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;
}