3 * Copyright 1998-2003 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 if( a == NULL ) return 0;
130 for ( i=0; a[i] != NULL; i++ ) {
131 if ( strcasecmp( s, a[i] ) == 0 ) {
140 ldap_charray_dup( char **a )
145 for ( i = 0; a[i] != NULL; i++ )
148 new = (char **) LDAP_MALLOC( (i + 1) * sizeof(char *) );
154 for ( i = 0; a[i] != NULL; i++ ) {
155 new[i] = LDAP_STRDUP( a[i] );
157 if( new[i] == NULL ) {
158 for( --i ; i >= 0 ; i-- ) {
171 ldap_str2charray( const char *str_in, const char *brkstr )
178 /* protect the input string from strtok */
179 str = LDAP_STRDUP( str_in );
185 for ( s = str; *s; s++ ) {
186 if ( ldap_utf8_strchr( brkstr, s ) != NULL ) {
191 res = (char **) LDAP_MALLOC( (i + 1) * sizeof(char *) );
200 for ( s = ldap_utf8_strtok( str, brkstr, &lasts );
202 s = ldap_utf8_strtok( NULL, brkstr, &lasts ) )
204 res[i] = LDAP_STRDUP( s );
207 for( --i ; i >= 0 ; i-- ) {
224 char * ldap_charray2str( char **a, const char *sep )
230 if( sep == NULL ) sep = " ";
232 slen = strlen( sep );
235 for ( v = a; *v != NULL; v++ ) {
236 len += strlen( *v ) + slen;
243 /* trim extra sep len */
246 s = LDAP_MALLOC ( len + 1 );
253 for ( v = a; *v != NULL; v++ ) {
255 strncpy( p, sep, slen );
260 strncpy( p, *v, len );