]> git.sur5r.net Git - openldap/blob - contrib/tweb/charray.c
Fix dynamic linking dependencies for NT and Unix
[openldap] / contrib / tweb / charray.c
1 /*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
2 *                                                                          *
3 * charray.c..                                                              *
4 *                                                                          *
5 * Function:..Array-Handling-Functions                                      *
6 *                                                                          *
7 *            from LDAP3.2 University of Michigan                           *
8 *                                                                          *
9 *            Patch: NULL-Pointers are caught in Arrays/Strings             *
10 *                                                                          *
11 *                                                                          *
12 * Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
13 *            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
14 *            neuer Dienste, Universitaet Tuebingen, GERMANY                *
15 *                                                                          *
16 *                                                                          *
17 *                                       ZZZZZ  DDD    V   V                *
18 *            Creation date:                Z   D  D   V   V                *
19 *            April 16 1996                Z    D   D   V V                 *
20 *            Last modification:          Z     D  D    V V                 *
21 *            December 21 1998           ZZZZ   DDD      V                  *
22 *                                                                          *
23 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
24
25 /*
26  * $Id: charray.c,v 1.6 1999/09/10 15:01:16 zrnsk01 Exp $
27  *
28  */
29
30 #include "tgeneral.h"
31 #include "charray_exp.h"
32 #include "ch_malloc_exp.h"
33
34 /* charray.c - routines for dealing with char * arrays */
35
36
37 PUBLIC void charray_add( a, s )
38 char    ***a;
39 char    *s;
40 {
41         int     n;
42
43         if ( s == NULL )
44                 return;
45
46         if ( *a == NULL ) {
47                 *a = (char **) ch_malloc( 2 * sizeof(char *) );
48                 n = 0;
49         } else {
50                 for ( n = 0; *a != NULL && (*a)[n] != NULL; n++ ) {
51                         ;       /* NULL */
52                 }
53
54                 *a = (char **) ch_realloc( (char *) *a,
55                     (n + 2) * sizeof(char *) );
56         }
57
58         (*a)[n++] = strdup(s);
59         (*a)[n] = NULL;
60 }
61 /* end of function: charray_add */
62
63 PUBLIC void charray_merge( a, s )
64 char    ***a;
65 char    **s;
66 {
67         int     i, n, nn;
68
69         if ( s == NULL )
70                 return;
71
72         for ( n = 0; *a != NULL && (*a)[n] != NULL; n++ ) {
73                 ;       /* NULL */
74         }
75
76         for ( nn = 0; s[nn] != NULL; nn++ ) {
77                 ;       /* NULL */
78         }
79
80         *a = (char **) ch_realloc( (char *) *a, (n + nn + 1) * sizeof(char *) );
81
82         for ( i = 0; i < nn; i++ ) {
83                 (*a)[n + i] = s[i];
84         }
85         (*a)[n + nn] = NULL;
86 }
87 /* end of function: charray_merge */
88
89 PUBLIC void charray_free( array )
90 char **array;
91 {
92         char    **a;
93
94         if ( array == NULL ) {
95                 return;
96         }
97
98         for ( a = array; *a != NULL; a++ ) {
99                 if ( *a != NULL ) {
100                         free( *a );
101                 }
102         }
103         free( (char *) array );
104 }
105 /* end of function: charray_free */
106
107 PUBLIC int charray_inlist( a, s )
108     char        **a;
109     char        *s;
110 {
111         int     i;
112
113         if (( a == NULL ) || ( s == NULL ))
114                 return( 0 );
115
116         for ( i = 0; a[i] != NULL; i++ ) {
117                 if ( strcasecmp( s, a[i] ) == 0 ) {
118                         return( 1 );
119                 }
120         }
121
122         return( 0 );
123 }
124 /* end of function: charray_inlist */
125
126 PUBLIC char ** charray_dup( a )
127 char **a;
128 {
129         int     i;
130         char    **new;
131
132         if ( a == NULL )
133                 return( NULL );
134
135         for ( i = 0; a[i] != NULL; i++ )
136                 ;       /* NULL */
137
138         new = (char **) ch_malloc( (i + 1) * sizeof(char *) );
139
140         for ( i = 0; a[i] != NULL; i++ ) {
141                 new[i] = strdup( a[i] );
142         }
143         new[i] = NULL;
144
145         return( new );
146 }
147 /* end of function: charray_dup */
148
149 PUBLIC char ** str2charray( str, brkstr )
150 char *str;
151 char *brkstr;
152 {
153         char    **res;
154         char    *s;
155         int     i;
156         char *str1;
157
158         if (( str == NULL ) || ( brkstr == NULL )) return( (char **) NULL );
159
160         str1 = strdup(str);
161         i = 1;
162         for ( s = str1; *s; s++ ) {
163                 if ( strchr( brkstr, *s ) != NULL ) {
164                         i++;
165                 }
166         }
167
168         res = (char **) ch_malloc( (i + 1) * sizeof(char *) );
169         i = 0;
170         for ( s = strtok( str1, brkstr ); s != NULL; s = strtok( NULL,
171             brkstr ) ) {
172                 res[i++] = strdup( s );
173         }
174         res[i] = NULL;
175
176         free(str1);
177         return( res );
178 }
179 /* end of function: str2charray */