]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/charray.c
Per ITS#419, don't require SLAPD_RLOOKUPS when HAVE_TCPD
[openldap] / servers / slapd / charray.c
index c2eb56ceaa06b5c57acc202d96c02be05f2a6107..60c212e509042940ba3cf8d3539516f9f5838ef0 100644 (file)
@@ -1,4 +1,9 @@
 /* charray.c - routines for dealing with char * arrays */
+/* $OpenLDAP$ */
+/*
+ * Copyright 1998-1999 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;
@@ -76,7 +81,7 @@ charray_free( char **array )
 int
 charray_inlist(
     char       **a,
-    char       *s
+    const char *s
 )
 {
        int     i;
@@ -109,15 +114,46 @@ charray_dup( char **a )
        return( new );
 }
 
+
+char *
+charray2str( char **a )
+{
+       char *s;
+       int i;
+       size_t cur, len = 0;
+
+       if( a == NULL ) return NULL;
+
+       for( i=0 ; a[i] != NULL ; i++ ) {
+               len += strlen( a[i] );
+       }
+
+       if( len == 0 ) return NULL;
+
+       s = ch_malloc( len + 1 );
+
+       cur = 0;
+       for( i=0 ; a[i] != NULL ; i++ ) {
+               len = strlen( a[i] );
+               strncpy( &s[cur], a[i], len );
+               cur += len;
+       }
+       s[len] = '\0';
+       return s;
+}
+
+
 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++ ) {
@@ -128,10 +164,14 @@ str2charray( char *str, char *brkstr )
 
        res = (char **) ch_malloc( (i + 1) * sizeof(char *) );
        i = 0;
-       for ( s = strtok( str, brkstr ); s != NULL; s = strtok( NULL,
-           brkstr ) ) {
+
+       for ( s = ldap_pvt_strtok( str, brkstr, &lasts );
+               s != NULL;
+               s = ldap_pvt_strtok( NULL, brkstr, &lasts ) )
+       {
                res[i++] = ch_strdup( s );
        }
+
        res[i] = NULL;
 
        free( str );