X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Fcharray.c;h=b40e232f62c6afef4458d1777f4f706adbf83022;hb=b0b8546f054f31b1a080defede171f833d20b124;hp=538aa02a4f541fc33654ab9d5d4a8cff3c905836;hpb=878d489ea9c56f2818c1f9bb9ab7cfad6edb96b7;p=openldap diff --git a/libraries/libldap/charray.c b/libraries/libldap/charray.c index 538aa02a4f..b40e232f62 100644 --- a/libraries/libldap/charray.c +++ b/libraries/libldap/charray.c @@ -1,5 +1,6 @@ +/* $OpenLDAP$ */ /* - * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ /* charray.c - routines for dealing with char * arrays */ @@ -76,8 +77,9 @@ ldap_charray_merge( aa = (char **) LDAP_REALLOC( (char *) *a, (n + nn + 1) * sizeof(char *) ); - if( aa == NULL ) + if( aa == NULL ) { return -1; + } *a = aa; @@ -164,22 +166,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++; } } @@ -193,9 +195,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 ); @@ -216,3 +218,47 @@ 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; + int slen; + + if( sep == NULL ) sep = " "; + + slen = strlen( sep ); + len = 0; + + for ( v = a; *v != NULL; v++ ) { + len += strlen( *v ) + slen; + } + + if ( len == 0 ) { + return NULL; + } + + /* trim extra sep len */ + len -= slen; + + s = LDAP_MALLOC ( len + 1 ); + + if ( s == NULL ) { + return NULL; + } + + p = s; + for ( v = a; *v != NULL; v++ ) { + if ( v != a ) { + strncpy( p, sep, slen ); + p += slen; + } + + len = strlen( *v ); + strncpy( p, *v, len ); + p += len; + } + + *p = '\0'; + return s; +}