X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Fcharray.c;h=82d2feeb1ba264e09413991ad54c337addb7d220;hb=a113c3ca9bd5a894e2a9f6426c95cff7ec0d1b89;hp=6be31524278042e45666f77ed1dec6f84ca0ca09;hpb=183a03cc2bf3c383b50dad3e4dd831ab3a32df6e;p=openldap diff --git a/libraries/libldap/charray.c b/libraries/libldap/charray.c index 6be3152427..82d2feeb1b 100644 --- a/libraries/libldap/charray.c +++ b/libraries/libldap/charray.c @@ -1,6 +1,6 @@ /* $OpenLDAP$ */ /* - * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ /* charray.c - routines for dealing with char * arrays */ @@ -165,22 +165,22 @@ ldap_charray_dup( char **a ) } char ** -ldap_str2charray( char *str, char *brkstr ) +ldap_str2charray( const char *str_in, const char *brkstr ) { char **res; - char *s; + char *str, *s; char *lasts; int i; /* protect the input string from strtok */ - str = LDAP_STRDUP( str ); + str = LDAP_STRDUP( str_in ); if( str == NULL ) { return NULL; } i = 1; for ( s = str; *s; s++ ) { - if ( strchr( brkstr, *s ) != NULL ) { + if ( ldap_utf8_strchr( brkstr, s ) != NULL ) { i++; } } @@ -194,9 +194,9 @@ ldap_str2charray( char *str, char *brkstr ) i = 0; - for ( s = ldap_pvt_strtok( str, brkstr, &lasts ); + for ( s = ldap_utf8_strtok( str, brkstr, &lasts ); s != NULL; - s = ldap_pvt_strtok( NULL, brkstr, &lasts ) ) + s = ldap_utf8_strtok( NULL, brkstr, &lasts ) ) { res[i] = LDAP_STRDUP( s ); @@ -217,3 +217,48 @@ ldap_str2charray( char *str, char *brkstr ) LDAP_FREE( str ); return( res ); } + +char * ldap_charray2str( char **a, const char *sep ) +{ + char *s, **v, *p; + int len = 0; + int slen; + + if( sep == NULL ) sep = " "; + + slen = strlen( sep ); + + for ( v = a; *v != NULL; v++ ) { + len += strlen( *v ) + slen; /* for a space */ + } + + if ( len == 0 ) { + return NULL; + } + + len -= slen; + len += 1; /* EOS */ + + s = LDAP_MALLOC ( len ); + + if ( s == NULL ) { + return NULL; + } + + p = s; + for ( v = a; *v != NULL; v++ ) { + int len; + + if ( v != a ) { + strncpy( p, sep, slen ); + p += slen; + } + + len = strlen( *v ); + strncpy( p, *v, len ); + p += len; + } + + *p = '\0'; + return s; +}