]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/charray.c
compare attribute type, not value
[openldap] / servers / slapd / charray.c
index c15c95ab6380e224bb4fb32d9a13f2dff914f266..768c167fd53c43c72da28424f3f29fbb298cafb0 100644 (file)
@@ -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
  */
 
@@ -229,47 +229,20 @@ slap_strcopy(
        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;
 }