]> git.sur5r.net Git - openldap/blob - servers/slapd/charray.c
Fixed "faled" typo in debug message
[openldap] / servers / slapd / charray.c
1 /* charray.c - routines for dealing with char * arrays */
2
3 #include <stdio.h>
4 #include <string.h>
5 #include <sys/types.h>
6 #include <sys/socket.h>
7 #include "slap.h"
8
9 void
10 charray_add(
11     char        ***a,
12     char        *s
13 )
14 {
15         int     n;
16
17         if ( *a == NULL ) {
18                 *a = (char **) ch_malloc( 2 * sizeof(char *) );
19                 n = 0;
20         } else {
21                 for ( n = 0; *a != NULL && (*a)[n] != NULL; n++ ) {
22                         ;       /* NULL */
23                 }
24
25                 *a = (char **) ch_realloc( (char *) *a,
26                     (n + 2) * sizeof(char *) );
27         }
28
29         (*a)[n++] = s;
30         (*a)[n] = NULL;
31 }
32
33 void
34 charray_merge(
35     char        ***a,
36     char        **s
37 )
38 {
39         int     i, n, nn;
40
41         for ( n = 0; *a != NULL && (*a)[n] != NULL; n++ ) {
42                 ;       /* NULL */
43         }
44         for ( nn = 0; s[nn] != NULL; nn++ ) {
45                 ;       /* NULL */
46         }
47
48         *a = (char **) ch_realloc( (char *) *a, (n + nn + 1) * sizeof(char *) );
49
50         for ( i = 0; i < nn; i++ ) {
51                 (*a)[n + i] = s[i];
52         }
53         (*a)[n + nn] = NULL;
54 }
55
56 void
57 charray_free( char **array )
58 {
59         char    **a;
60
61         if ( array == NULL ) {
62                 return;
63         }
64
65         for ( a = array; *a != NULL; a++ ) {
66                 if ( *a != NULL ) {
67                         free( *a );
68                 }
69         }
70         free( (char *) array );
71 }
72
73 int
74 charray_inlist(
75     char        **a,
76     char        *s
77 )
78 {
79         int     i;
80
81         for ( i = 0; a[i] != NULL; i++ ) {
82                 if ( strcasecmp( s, a[i] ) == 0 ) {
83                         return( 1 );
84                 }
85         }
86
87         return( 0 );
88 }
89
90 char **
91 charray_dup( char **a )
92 {
93         int     i;
94         char    **new;
95
96         for ( i = 0; a[i] != NULL; i++ )
97                 ;       /* NULL */
98
99         new = (char **) ch_malloc( (i + 1) * sizeof(char *) );
100
101         for ( i = 0; a[i] != NULL; i++ ) {
102                 new[i] = strdup( a[i] );
103         }
104         new[i] = NULL;
105
106         return( new );
107 }
108
109 char **
110 str2charray( char *str_in, char *brkstr )
111 {
112         char    **res;
113         char    *s;
114         int     i;
115
116         /* protect the input string from strtok */
117         char *str = strdup( str_in );
118
119         i = 1;
120         for ( s = str; *s; s++ ) {
121                 if ( strchr( brkstr, *s ) != NULL ) {
122                         i++;
123                 }
124         }
125
126         res = (char **) ch_malloc( (i + 1) * sizeof(char *) );
127         i = 0;
128         for ( s = strtok( str, brkstr ); s != NULL; s = strtok( NULL,
129             brkstr ) ) {
130                 res[i++] = strdup( s );
131         }
132         res[i] = NULL;
133
134         free( str );
135         return( res );
136 }