]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/charray.c
Fix backend_destroy to call bi_destroy instead of bi_close
[openldap] / servers / slapd / charray.c
index e3b4d37feb673e60821ed43169280dc15dc3e347..741a0e15954cc7c62a429a3e6c4c1fceb04c4708 100644 (file)
@@ -1,9 +1,12 @@
 /* charray.c - routines for dealing with char * arrays */
 
+#include "portable.h"
+
 #include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
+
+#include <ac/string.h>
+#include <ac/socket.h>
+
 #include "slap.h"
 
 void
@@ -26,7 +29,7 @@ charray_add(
                    (n + 2) * sizeof(char *) );
        }
 
-       (*a)[n++] = s;
+       (*a)[n++] = ch_strdup(s);
        (*a)[n] = NULL;
 }
 
@@ -48,7 +51,7 @@ charray_merge(
        *a = (char **) ch_realloc( (char *) *a, (n + nn + 1) * sizeof(char *) );
 
        for ( i = 0; i < nn; i++ ) {
-               (*a)[n + i] = s[i];
+               (*a)[n + i] = ch_strdup(s[i]);
        }
        (*a)[n + nn] = NULL;
 }
@@ -99,7 +102,7 @@ charray_dup( char **a )
        new = (char **) ch_malloc( (i + 1) * sizeof(char *) );
 
        for ( i = 0; a[i] != NULL; i++ ) {
-               new[i] = strdup( a[i] );
+               new[i] = ch_strdup( a[i] );
        }
        new[i] = NULL;
 
@@ -107,14 +110,15 @@ charray_dup( char **a )
 }
 
 char **
-str2charray( char *str_in, char *brkstr )
+str2charray( char *str, char *brkstr )
 {
        char    **res;
        char    *s;
+       char    *lasts;
        int     i;
 
        /* protect the input string from strtok */
-       char *str = strdup( str_in );
+       str = ch_strdup( str );
 
        i = 1;
        for ( s = str; *s; s++ ) {
@@ -125,10 +129,14 @@ str2charray( char *str_in, char *brkstr )
 
        res = (char **) ch_malloc( (i + 1) * sizeof(char *) );
        i = 0;
-       for ( s = strtok( str, brkstr ); s != NULL; s = strtok( NULL,
-           brkstr ) ) {
-               res[i++] = strdup( s );
+
+       for ( s = strtok_r( str, brkstr, &lasts );
+               s != NULL;
+               s = strtok_r( NULL, brkstr, &lasts ) )
+       {
+               res[i++] = ch_strdup( s );
        }
+
        res[i] = NULL;
 
        free( str );