]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/charray.c
Revert previous commit
[openldap] / servers / slapd / charray.c
index 741a0e15954cc7c62a429a3e6c4c1fceb04c4708..46bff0714af508f3ff9819c9bafd00528180d9b8 100644 (file)
@@ -1,4 +1,9 @@
 /* charray.c - routines for dealing with char * arrays */
+/* $OpenLDAP$ */
+/*
+ * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
+ * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+ */
 
 #include "portable.h"
 
@@ -12,7 +17,7 @@
 void
 charray_add(
     char       ***a,
-    char       *s
+    const char *s
 )
 {
        int     n;
@@ -33,6 +38,33 @@ charray_add(
        (*a)[n] = NULL;
 }
 
+void
+charray_add_n(
+    char       ***a,
+    const char *s,
+    int         l
+)
+{
+       int     n;
+
+       if ( *a == NULL ) {
+               *a = (char **) ch_malloc( 2 * sizeof(char *) );
+               n = 0;
+       } else {
+               for ( n = 0; *a != NULL && (*a)[n] != NULL; n++ ) {
+                       ;       /* NULL */
+               }
+
+               *a = (char **) ch_realloc( (char *) *a,
+                   (n + 2) * sizeof(char *) );
+       }
+
+       (*a)[n] = (char *) ch_malloc( ( l + 1 ) * sizeof( char ) );
+       strncpy( (*a)[n], s, l );
+       (*a)[n][l] = '\0';
+       (*a)[++n] = NULL;
+}
+
 void
 charray_merge(
     char       ***a,
@@ -76,11 +108,13 @@ charray_free( char **array )
 int
 charray_inlist(
     char       **a,
-    char       *s
+    const char *s
 )
 {
        int     i;
 
+       if( a == NULL ) return 0;
+
        for ( i = 0; a[i] != NULL; i++ ) {
                if ( strcasecmp( s, a[i] ) == 0 ) {
                        return( 1 );
@@ -109,16 +143,18 @@ charray_dup( char **a )
        return( new );
 }
 
+
 char **
-str2charray( char *str, char *brkstr )
+str2charray( const char *str_in, const char *brkstr )
 {
+       char    *str;
        char    **res;
        char    *s;
        char    *lasts;
        int     i;
 
        /* protect the input string from strtok */
-       str = ch_strdup( str );
+       str = ch_strdup( str_in );
 
        i = 1;
        for ( s = str; *s; s++ ) {
@@ -130,9 +166,9 @@ str2charray( char *str, char *brkstr )
        res = (char **) ch_malloc( (i + 1) * sizeof(char *) );
        i = 0;
 
-       for ( s = strtok_r( str, brkstr, &lasts );
+       for ( s = ldap_pvt_strtok( str, brkstr, &lasts );
                s != NULL;
-               s = strtok_r( NULL, brkstr, &lasts ) )
+               s = ldap_pvt_strtok( NULL, brkstr, &lasts ) )
        {
                res[i++] = ch_strdup( s );
        }
@@ -142,3 +178,36 @@ str2charray( char *str, char *brkstr )
        free( str );
        return( res );
 }
+
+int
+charray_strcmp( const char **a1, const char **a2 )
+{
+       for ( ; a1[0] && a2[0]; a1++, a2++ ) {
+               if ( strcmp( a1[0], a2[0] ) ) {
+                       return( !0 );
+               }
+       }
+
+       if ( a1[0] || a2[0] ) {
+               return( !0 );
+       }
+
+       return 0;
+}
+
+
+int
+charray_strcasecmp( const char **a1, const char **a2 )
+{
+       for ( ; a1[0] && a2[0]; a1++, a2++ ) {
+               if ( strcasecmp( a1[0], a2[0] ) ) {
+                       return( !0 );
+               }
+       }
+
+       if ( a1[0] || a2[0] ) {
+               return( !0 );
+       }
+
+       return 0;
+}