OpenCoverage

stringlist.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/bash/src/lib/sh/stringlist.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* stringlist.c - functions to handle a generic `list of strings' structure */-
2-
3/* Copyright (C) 2000-2002 Free Software Foundation, Inc.-
4-
5 This file is part of GNU Bash, the Bourne Again SHell.-
6-
7 Bash is free software: you can redistribute it and/or modify-
8 it under the terms of the GNU General Public License as published by-
9 the Free Software Foundation, either version 3 of the License, or-
10 (at your option) any later version.-
11-
12 Bash is distributed in the hope that it will be useful,-
13 but WITHOUT ANY WARRANTY; without even the implied warranty of-
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the-
15 GNU General Public License for more details.-
16-
17 You should have received a copy of the GNU General Public License-
18 along with Bash. If not, see <http://www.gnu.org/licenses/>.-
19*/-
20-
21#include <config.h>-
22-
23#if defined (HAVE_UNISTD_H)-
24# include <unistd.h>-
25#endif-
26-
27#include <stdio.h>-
28#include <bashansi.h>-
29-
30#include "shell.h"-
31-
32#ifdef STRDUP-
33# undef STRDUP-
34#endif-
35#define STRDUP(x) ((x) ? savestring (x) : (char *)NULL)-
36-
37/* Allocate a new STRINGLIST, with room for N strings. */-
38-
39STRINGLIST *-
40strlist_create (n)-
41 int n;-
42{-
43 STRINGLIST *ret;-
44 register int i;-
45-
46 ret = (STRINGLIST *)xmalloc (sizeof (STRINGLIST));-
47 if (n)
nDescription
TRUEnever evaluated
FALSEnever evaluated
0
48 {-
49 ret->list = strvec_create (n+1);-
50 ret->list_size = n;-
51 for (i = 0; i < n; i++)
i < nDescription
TRUEnever evaluated
FALSEnever evaluated
0
52 ret->list[i] = (char *)NULL;
never executed: ret->list[i] = (char *) ((void *)0) ;
0
53 }
never executed: end of block
0
54 else-
55 {-
56 ret->list = (char **)NULL;-
57 ret->list_size = 0;-
58 }
never executed: end of block
0
59 ret->list_len = 0;-
60 return ret;
never executed: return ret;
0
61}-
62-
63STRINGLIST *-
64strlist_resize (sl, n)-
65 STRINGLIST *sl;-
66 int n;-
67{-
68 register int i;-
69-
70 if (sl == 0)
sl == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
71 return (sl = strlist_create (n));
never executed: return (sl = strlist_create (n));
0
72-
73 if (n > sl->list_size)
n > sl->list_sizeDescription
TRUEnever evaluated
FALSEnever evaluated
0
74 {-
75 sl->list = strvec_resize (sl->list, n + 1);-
76 for (i = sl->list_size; i <= n; i++)
i <= nDescription
TRUEnever evaluated
FALSEnever evaluated
0
77 sl->list[i] = (char *)NULL;
never executed: sl->list[i] = (char *) ((void *)0) ;
0
78 sl->list_size = n;-
79 }
never executed: end of block
0
80 return sl;
never executed: return sl;
0
81}-
82-
83void-
84strlist_flush (sl)-
85 STRINGLIST *sl;-
86{-
87 if (sl == 0 || sl->list == 0)
sl == 0Description
TRUEnever evaluated
FALSEnever evaluated
sl->list == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
88 return;
never executed: return;
0
89 strvec_flush (sl->list);-
90 sl->list_len = 0;-
91}
never executed: end of block
0
92 -
93void-
94strlist_dispose (sl)-
95 STRINGLIST *sl;-
96{-
97 if (sl == 0)
sl == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
98 return;
never executed: return;
0
99 if (sl->list)
sl->listDescription
TRUEnever evaluated
FALSEnever evaluated
0
100 strvec_dispose (sl->list);
never executed: strvec_dispose (sl->list);
0
101 free (sl);-
102}
never executed: end of block
0
103-
104int-
105strlist_remove (sl, s)-
106 STRINGLIST *sl;-
107 char *s;-
108{-
109 int r;-
110-
111 if (sl == 0 || sl->list == 0 || sl->list_len == 0)
sl == 0Description
TRUEnever evaluated
FALSEnever evaluated
sl->list == 0Description
TRUEnever evaluated
FALSEnever evaluated
sl->list_len == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
112 return 0;
never executed: return 0;
0
113-
114 r = strvec_remove (sl->list, s);-
115 if (r)
rDescription
TRUEnever evaluated
FALSEnever evaluated
0
116 sl->list_len--;
never executed: sl->list_len--;
0
117 return r;
never executed: return r;
0
118}-
119-
120STRINGLIST *-
121strlist_copy (sl)-
122 STRINGLIST *sl;-
123{-
124 STRINGLIST *new;-
125 register int i;-
126-
127 if (sl == 0)
sl == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
128 return ((STRINGLIST *)0);
never executed: return ((STRINGLIST *)0);
0
129 new = strlist_create (sl->list_size);-
130 /* I'd like to use strvec_copy, but that doesn't copy everything. */-
131 if (sl->list)
sl->listDescription
TRUEnever evaluated
FALSEnever evaluated
0
132 {-
133 for (i = 0; i < sl->list_size; i++)
i < sl->list_sizeDescription
TRUEnever evaluated
FALSEnever evaluated
0
134 new->list[i] = STRDUP (sl->list[i]);
never executed: new->list[i] = ((sl->list[i]) ? (char *)strcpy (sh_xmalloc((1 + strlen (sl->list[i])), "stringlist.c", 134), (sl->list[i])) : (char *) ((void *)0) );
(sl->list[i])Description
TRUEnever evaluated
FALSEnever evaluated
0
135 }
never executed: end of block
0
136 new->list_size = sl->list_size;-
137 new->list_len = sl->list_len;-
138 /* just being careful */-
139 if (new->list)
new->listDescription
TRUEnever evaluated
FALSEnever evaluated
0
140 new->list[new->list_len] = (char *)NULL;
never executed: new->list[new->list_len] = (char *) ((void *)0) ;
0
141 return new;
never executed: return new;
0
142}-
143-
144/* Return a new STRINGLIST with everything from M1 and M2. */-
145-
146STRINGLIST *-
147strlist_merge (m1, m2)-
148 STRINGLIST *m1, *m2;-
149{-
150 STRINGLIST *sl;-
151 int i, n, l1, l2;-
152-
153 l1 = m1 ? m1->list_len : 0;
m1Description
TRUEnever evaluated
FALSEnever evaluated
0
154 l2 = m2 ? m2->list_len : 0;
m2Description
TRUEnever evaluated
FALSEnever evaluated
0
155-
156 sl = strlist_create (l1 + l2 + 1);-
157 for (i = n = 0; i < l1; i++, n++)
i < l1Description
TRUEnever evaluated
FALSEnever evaluated
0
158 sl->list[n] = STRDUP (m1->list[i]);
never executed: sl->list[n] = ((m1->list[i]) ? (char *)strcpy (sh_xmalloc((1 + strlen (m1->list[i])), "stringlist.c", 158), (m1->list[i])) : (char *) ((void *)0) );
(m1->list[i])Description
TRUEnever evaluated
FALSEnever evaluated
0
159 for (i = 0; i < l2; i++, n++)
i < l2Description
TRUEnever evaluated
FALSEnever evaluated
0
160 sl->list[n] = STRDUP (m2->list[i]);
never executed: sl->list[n] = ((m2->list[i]) ? (char *)strcpy (sh_xmalloc((1 + strlen (m2->list[i])), "stringlist.c", 160), (m2->list[i])) : (char *) ((void *)0) );
(m2->list[i])Description
TRUEnever evaluated
FALSEnever evaluated
0
161 sl->list_len = n;-
162 sl->list[n] = (char *)NULL;-
163 return (sl);
never executed: return (sl);
0
164}-
165-
166/* Make STRINGLIST M1 contain everything in M1 and M2. */-
167STRINGLIST *-
168strlist_append (m1, m2)-
169 STRINGLIST *m1, *m2;-
170{-
171 register int i, n, len1, len2;-
172-
173 if (m1 == 0)
m1 == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
174 return (m2 ? strlist_copy (m2) : (STRINGLIST *)0);
never executed: return (m2 ? strlist_copy (m2) : (STRINGLIST *)0);
0
175-
176 len1 = m1->list_len;-
177 len2 = m2 ? m2->list_len : 0;
m2Description
TRUEnever evaluated
FALSEnever evaluated
0
178-
179 if (len2)
len2Description
TRUEnever evaluated
FALSEnever evaluated
0
180 {-
181 m1 = strlist_resize (m1, len1 + len2 + 1);-
182 for (i = 0, n = len1; i < len2; i++, n++)
i < len2Description
TRUEnever evaluated
FALSEnever evaluated
0
183 m1->list[n] = STRDUP (m2->list[i]);
never executed: m1->list[n] = ((m2->list[i]) ? (char *)strcpy (sh_xmalloc((1 + strlen (m2->list[i])), "stringlist.c", 183), (m2->list[i])) : (char *) ((void *)0) );
(m2->list[i])Description
TRUEnever evaluated
FALSEnever evaluated
0
184 m1->list[n] = (char *)NULL;-
185 m1->list_len = n;-
186 }
never executed: end of block
0
187-
188 return m1;
never executed: return m1;
0
189}-
190-
191STRINGLIST *-
192strlist_prefix_suffix (sl, prefix, suffix)-
193 STRINGLIST *sl;-
194 char *prefix, *suffix;-
195{-
196 int plen, slen, tlen, llen, i;-
197 char *t;-
198-
199 if (sl == 0 || sl->list == 0 || sl->list_len == 0)
sl == 0Description
TRUEnever evaluated
FALSEnever evaluated
sl->list == 0Description
TRUEnever evaluated
FALSEnever evaluated
sl->list_len == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
200 return sl;
never executed: return sl;
0
201-
202 plen = STRLEN (prefix);
(prefix)[1]Description
TRUEnever evaluated
FALSEnever evaluated
(prefix)[2]Description
TRUEnever evaluated
FALSEnever evaluated
(prefix)Description
TRUEnever evaluated
FALSEnever evaluated
(prefix)[0]Description
TRUEnever evaluated
FALSEnever evaluated
0
203 slen = STRLEN (suffix);
(suffix)[1]Description
TRUEnever evaluated
FALSEnever evaluated
(suffix)[2]Description
TRUEnever evaluated
FALSEnever evaluated
(suffix)Description
TRUEnever evaluated
FALSEnever evaluated
(suffix)[0]Description
TRUEnever evaluated
FALSEnever evaluated
0
204-
205 if (plen == 0 && slen == 0)
plen == 0Description
TRUEnever evaluated
FALSEnever evaluated
slen == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
206 return (sl);
never executed: return (sl);
0
207-
208 for (i = 0; i < sl->list_len; i++)
i < sl->list_lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
209 {-
210 llen = STRLEN (sl->list[i]);
(sl->list[i])[1]Description
TRUEnever evaluated
FALSEnever evaluated
(sl->list[i])[2]Description
TRUEnever evaluated
FALSEnever evaluated
(sl->list[i])Description
TRUEnever evaluated
FALSEnever evaluated
(sl->list[i])[0]Description
TRUEnever evaluated
FALSEnever evaluated
0
211 tlen = plen + llen + slen + 1;-
212 t = (char *)xmalloc (tlen + 1);-
213 if (plen)
plenDescription
TRUEnever evaluated
FALSEnever evaluated
0
214 strcpy (t, prefix);
never executed: strcpy (t, prefix);
0
215 strcpy (t + plen, sl->list[i]);-
216 if (slen)
slenDescription
TRUEnever evaluated
FALSEnever evaluated
0
217 strcpy (t + plen + llen, suffix);
never executed: strcpy (t + plen + llen, suffix);
0
218 free (sl->list[i]);-
219 sl->list[i] = t;-
220 }
never executed: end of block
0
221-
222 return (sl);
never executed: return (sl);
0
223}-
224 -
225void-
226strlist_print (sl, prefix)-
227 STRINGLIST *sl;-
228 char *prefix;-
229{-
230 register int i;-
231-
232 if (sl == 0)
sl == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
233 return;
never executed: return;
0
234 for (i = 0; i < sl->list_len; i++)
i < sl->list_lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
235 printf ("%s%s\n", prefix ? prefix : "", sl->list[i]);
never executed: printf ("%s%s\n", prefix ? prefix : "", sl->list[i]);
0
236}
never executed: end of block
0
237-
238void-
239strlist_walk (sl, func)-
240 STRINGLIST *sl;-
241 sh_strlist_map_func_t *func;-
242{-
243 register int i;-
244-
245 if (sl == 0)
sl == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
246 return;
never executed: return;
0
247 for (i = 0; i < sl->list_len; i++)
i < sl->list_lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
248 if ((*func)(sl->list[i]) < 0)
(*func)(sl->list[i]) < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
249 break;
never executed: break;
0
250}
never executed: end of block
never executed: end of block
0
251 -
252void-
253strlist_sort (sl)-
254 STRINGLIST *sl;-
255{-
256 if (sl == 0 || sl->list_len == 0 || sl->list == 0)
sl == 0Description
TRUEnever evaluated
FALSEnever evaluated
sl->list_len == 0Description
TRUEnever evaluated
FALSEnever evaluated
sl->list == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
257 return;
never executed: return;
0
258 strvec_sort (sl->list);-
259}
never executed: end of block
0
260-
261STRINGLIST *-
262strlist_from_word_list (list, alloc, starting_index, ip)-
263 WORD_LIST *list;-
264 int alloc, starting_index, *ip;-
265{-
266 STRINGLIST *ret;-
267 int slen, len;-
268-
269 if (list == 0)
list == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
270 {-
271 if (ip)
ipDescription
TRUEnever evaluated
FALSEnever evaluated
0
272 *ip = 0;
never executed: *ip = 0;
0
273 return ((STRINGLIST *)0);
never executed: return ((STRINGLIST *)0);
0
274 }-
275 slen = list_length (list);-
276 ret = (STRINGLIST *)xmalloc (sizeof (STRINGLIST));-
277 ret->list = strvec_from_word_list (list, alloc, starting_index, &len);-
278 ret->list_size = slen + starting_index;-
279 ret->list_len = len;-
280 if (ip)
ipDescription
TRUEnever evaluated
FALSEnever evaluated
0
281 *ip = len;
never executed: *ip = len;
0
282 return ret;
never executed: return ret;
0
283}-
284-
285WORD_LIST *-
286strlist_to_word_list (sl, alloc, starting_index)-
287 STRINGLIST *sl;-
288 int alloc, starting_index;-
289{-
290 WORD_LIST *list;-
291-
292 if (sl == 0 || sl->list == 0)
sl == 0Description
TRUEnever evaluated
FALSEnever evaluated
sl->list == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
293 return ((WORD_LIST *)NULL);
never executed: return ((WORD_LIST *) ((void *)0) );
0
294-
295 list = strvec_to_word_list (sl->list, alloc, starting_index);-
296 return list;
never executed: return list;
0
297}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2