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 *) );
85 for ( i = 0; i < nn; i++ ) {
86 (*a)[n + i] = LDAP_STRDUP(s[i]);
88 if( (*a)[n + i] == NULL ) {
89 for( --i ; i >= 0 ; i-- ) {
90 LDAP_FREE( (*a)[n + i] );
102 ldap_charray_free( char **a )
110 for ( p = a; *p != NULL; p++ ) {
116 LDAP_FREE( (char *) a );
127 for ( i = 0; a[i] != NULL; i++ ) {
128 if ( strcasecmp( s, a[i] ) == 0 ) {
137 ldap_charray_dup( char **a )
142 for ( i = 0; a[i] != NULL; i++ )
145 new = (char **) LDAP_MALLOC( (i + 1) * sizeof(char *) );
151 for ( i = 0; a[i] != NULL; i++ ) {
152 new[i] = LDAP_STRDUP( a[i] );
154 if( new[i] == NULL ) {
155 for( --i ; i >= 0 ; i-- ) {
168 ldap_str2charray( const char *str_in, const char *brkstr )
175 /* protect the input string from strtok */
176 str = LDAP_STRDUP( str_in );
182 for ( s = str; *s; s++ ) {
183 if ( ldap_utf8_strchr( brkstr, s ) != NULL ) {
188 res = (char **) LDAP_MALLOC( (i + 1) * sizeof(char *) );
197 for ( s = ldap_utf8_strtok( str, brkstr, &lasts );
199 s = ldap_utf8_strtok( NULL, brkstr, &lasts ) )
201 res[i] = LDAP_STRDUP( s );
204 for( --i ; i >= 0 ; i-- ) {
221 char * ldap_charray2str( char **a, const char *sep )
227 if( sep == NULL ) sep = " ";
229 slen = strlen( sep );
231 for ( v = a; *v != NULL; v++ ) {
232 len += strlen( *v ) + slen; /* for a space */
242 s = LDAP_MALLOC ( len );
249 for ( v = a; *v != NULL; v++ ) {
253 strncpy( p, sep, slen );
258 strncpy( p, *v, len );