3 * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
4 * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
6 /* charray.c - routines for dealing with char * arrays */
12 #include <ac/string.h>
13 #include <ac/socket.h>
26 *a = (char **) LDAP_MALLOC( 2 * sizeof(char *) );
36 for ( n = 0; *a != NULL && (*a)[n] != NULL; n++ ) {
40 new = (char **) LDAP_REALLOC( (char *) *a,
41 (n + 2) * sizeof(char *) );
44 /* caller is required to call ldap_charray_free(*a) */
51 (*a)[n] = LDAP_STRDUP(s);
53 if( (*a)[n] == NULL ) {
71 for ( n = 0; *a != NULL && (*a)[n] != NULL; n++ ) {
74 for ( nn = 0; s[nn] != NULL; nn++ ) {
78 aa = (char **) LDAP_REALLOC( (char *) *a, (n + nn + 1) * sizeof(char *) );
86 for ( i = 0; i < nn; i++ ) {
87 (*a)[n + i] = LDAP_STRDUP(s[i]);
89 if( (*a)[n + i] == NULL ) {
90 for( --i ; i >= 0 ; i-- ) {
91 LDAP_FREE( (*a)[n + i] );
103 ldap_charray_free( char **a )
111 for ( p = a; *p != NULL; p++ ) {
117 LDAP_FREE( (char *) a );
128 for ( i = 0; a[i] != NULL; i++ ) {
129 if ( strcasecmp( s, a[i] ) == 0 ) {
138 ldap_charray_dup( char **a )
143 for ( i = 0; a[i] != NULL; i++ )
146 new = (char **) LDAP_MALLOC( (i + 1) * sizeof(char *) );
152 for ( i = 0; a[i] != NULL; i++ ) {
153 new[i] = LDAP_STRDUP( a[i] );
155 if( new[i] == NULL ) {
156 for( --i ; i >= 0 ; i-- ) {
169 ldap_str2charray( const char *str_in, const char *brkstr )
176 /* protect the input string from strtok */
177 str = LDAP_STRDUP( str_in );
183 for ( s = str; *s; s++ ) {
184 if ( ldap_utf8_strchr( brkstr, s ) != NULL ) {
189 res = (char **) LDAP_MALLOC( (i + 1) * sizeof(char *) );
198 for ( s = ldap_utf8_strtok( str, brkstr, &lasts );
200 s = ldap_utf8_strtok( NULL, brkstr, &lasts ) )
202 res[i] = LDAP_STRDUP( s );
205 for( --i ; i >= 0 ; i-- ) {
222 char * ldap_charray2str( char **a, const char *sep )
228 if( sep == NULL ) sep = " ";
230 slen = strlen( sep );
233 for ( v = a; *v != NULL; v++ ) {
234 len += strlen( *v ) + slen;
241 /* trim extra sep len */
244 s = LDAP_MALLOC ( len + 1 );
251 for ( v = a; *v != NULL; v++ ) {
253 strncpy( p, sep, slen );
258 strncpy( p, *v, len );