OpenCoverage

smatch.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/bash/src/lib/glob/smatch.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* strmatch.c -- ksh-like extended pattern matching for the shell and filename-
2 globbing. */-
3-
4/* Copyright (C) 1991-2017 Free Software Foundation, Inc.-
5-
6 This file is part of GNU Bash, the Bourne Again SHell.-
7 -
8 Bash is free software: you can redistribute it and/or modify-
9 it under the terms of the GNU General Public License as published by-
10 the Free Software Foundation, either version 3 of the License, or-
11 (at your option) any later version.-
12-
13 Bash is distributed in the hope that it will be useful,-
14 but WITHOUT ANY WARRANTY; without even the implied warranty of-
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the-
16 GNU General Public License for more details.-
17-
18 You should have received a copy of the GNU General Public License-
19 along with Bash. If not, see <http://www.gnu.org/licenses/>.-
20*/-
21-
22#include <config.h>-
23-
24#include <stdio.h> /* for debugging */-
25 -
26#include "strmatch.h"-
27#include <chartypes.h>-
28-
29#include "bashansi.h"-
30#include "shmbutil.h"-
31#include "xmalloc.h"-
32-
33/* First, compile `sm_loop.c' for single-byte characters. */-
34#define CHAR unsigned char-
35#define U_CHAR unsigned char-
36#define XCHAR char-
37#define INT int-
38#define L(CS) CS-
39#define INVALID -1-
40-
41#undef STREQ-
42#undef STREQN-
43#define STREQ(a, b) ((a)[0] == (b)[0] && strcmp(a, b) == 0)-
44#define STREQN(a, b, n) ((a)[0] == (b)[0] && strncmp(a, b, n) == 0)-
45-
46#ifndef GLOBASCII_DEFAULT-
47# define GLOBASCII_DEFAULT 0-
48#endif-
49-
50int glob_asciirange = GLOBASCII_DEFAULT;-
51-
52/* We use strcoll(3) for range comparisons in bracket expressions,-
53 even though it can have unwanted side effects in locales-
54 other than POSIX or US. For instance, in the de locale, [A-Z] matches-
55 all characters. If GLOB_ASCIIRANGE is non-zero, and we're not forcing-
56 the use of strcoll (e.g., for explicit collating symbols), we use-
57 straight ordering as if in the C locale. */-
58-
59#if defined (HAVE_STRCOLL)-
60/* Helper function for collating symbol equivalence. */-
61static int-
62rangecmp (c1, c2, forcecoll)-
63 int c1, c2;-
64 int forcecoll;-
65{-
66 static char s1[2] = { ' ', '\0' };-
67 static char s2[2] = { ' ', '\0' };-
68 int ret;-
69-
70 /* Eight bits only. Period. */-
71 c1 &= 0xFF;-
72 c2 &= 0xFF;-
73-
74 if (c1 == c2)
c1 == c2Description
TRUEevaluated 36134 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 518801 times by 1 test
Evaluated by:
  • Self test
36134-518801
75 return (0);
executed 36134 times by 1 test: return (0);
Executed by:
  • Self test
36134
76-
77 if (forcecoll == 0 && glob_asciirange)
forcecoll == 0Description
TRUEevaluated 518771 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 30 times by 1 test
Evaluated by:
  • Self test
glob_asciirangeDescription
TRUEnever evaluated
FALSEevaluated 518771 times by 1 test
Evaluated by:
  • Self test
0-518771
78 return (c1 - c2);
never executed: return (c1 - c2);
0
79-
80 s1[0] = c1;-
81 s2[0] = c2;-
82-
83 if ((ret = strcoll (s1, s2)) != 0)
(ret = strcoll (s1, s2)) != 0Description
TRUEevaluated 518801 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-518801
84 return ret;
executed 518801 times by 1 test: return ret;
Executed by:
  • Self test
518801
85 return (c1 - c2);
never executed: return (c1 - c2);
0
86}-
87#else /* !HAVE_STRCOLL */-
88# define rangecmp(c1, c2, f) ((int)(c1) - (int)(c2))-
89#endif /* !HAVE_STRCOLL */-
90-
91#if defined (HAVE_STRCOLL)-
92static int-
93collequiv (c1, c2)-
94 int c1, c2;-
95{-
96 return (rangecmp (c1, c2, 1) == 0);
executed 3 times by 1 test: return (rangecmp (c1, c2, 1) == 0);
Executed by:
  • Self test
3
97}-
98#else-
99# define collequiv(c1, c2) ((c1) == (c2))-
100#endif-
101-
102#define _COLLSYM _collsym-
103#define __COLLSYM __collsym-
104#define POSIXCOLL posix_collsyms-
105#include "collsyms.h"-
106-
107static int-
108collsym (s, len)-
109 CHAR *s;-
110 int len;-
111{-
112 register struct _collsym *csp;-
113 char *x;-
114-
115 x = (char *)s;-
116 for (csp = posix_collsyms; csp->name; csp++)
csp->nameDescription
TRUEevaluated 2142 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 20 times by 1 test
Evaluated by:
  • Self test
20-2142
117 {-
118 if (STREQN(csp->name, x, len) && csp->name[len] == '\0')
never executed: __result = (((const unsigned char *) (const char *) ( csp->name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( x ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
(csp->name)[0] == (x)[0]Description
TRUEevaluated 45 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 2097 times by 1 test
Evaluated by:
  • Self test
(__extension__..., len ))) == 0Description
TRUEevaluated 33 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 12 times by 1 test
Evaluated by:
  • Self test
__builtin_constant_p ( len )Description
TRUEnever evaluated
FALSEevaluated 45 times by 1 test
Evaluated by:
  • Self test
__builtin_cons... ( csp->name )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( csp->...ze_t) ( len ))Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_constant_p ( x )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( x ) <...ze_t) ( len ))Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
csp->name[len] == '\0'Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 28 times by 1 test
Evaluated by:
  • Self test
0-2097
119 return (csp->code);
executed 5 times by 1 test: return (csp->code);
Executed by:
  • Self test
5
120 }
executed 2137 times by 1 test: end of block
Executed by:
  • Self test
2137
121 if (len == 1)
len == 1Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 7 times by 1 test
Evaluated by:
  • Self test
7-13
122 return s[0];
executed 13 times by 1 test: return s[0];
Executed by:
  • Self test
13
123 return INVALID;
executed 7 times by 1 test: return -1;
Executed by:
  • Self test
7
124}-
125-
126/* unibyte character classification */-
127#if !defined (isascii) && !defined (HAVE_ISASCII)-
128# define isascii(c) ((unsigned int)(c) <= 0177)-
129#endif-
130-
131enum char_class-
132 {-
133 CC_NO_CLASS = 0,-
134 CC_ASCII, CC_ALNUM, CC_ALPHA, CC_BLANK, CC_CNTRL, CC_DIGIT, CC_GRAPH,-
135 CC_LOWER, CC_PRINT, CC_PUNCT, CC_SPACE, CC_UPPER, CC_WORD, CC_XDIGIT-
136 };-
137-
138static char const *const cclass_name[] =-
139 {-
140 "",-
141 "ascii", "alnum", "alpha", "blank", "cntrl", "digit", "graph",-
142 "lower", "print", "punct", "space", "upper", "word", "xdigit"-
143 };-
144-
145#define N_CHAR_CLASS (sizeof(cclass_name) / sizeof (cclass_name[0]))-
146-
147static enum char_class-
148is_valid_cclass (name)-
149 const char *name;-
150{-
151 enum char_class ret;-
152 int i;-
153-
154 ret = CC_NO_CLASS;-
155-
156 for (i = 1; i < N_CHAR_CLASS; i++)
i < (sizeof(cc...lass_name[0]))Description
TRUEevaluated 159112 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
1-159112
157 {-
158 if (STREQ (name, cclass_name[i]))
never executed: __result = (((const unsigned char *) (const char *) ( name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( cclass_name[i] ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
(name)[0] == (...ss_name[i])[0]Description
TRUEevaluated 158598 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 514 times by 1 test
Evaluated by:
  • Self test
__extension__ ... )))); }) == 0Description
TRUEevaluated 79302 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 79296 times by 1 test
Evaluated by:
  • Self test
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-158598
159 {-
160 ret = (enum char_class)i;-
161 break;
executed 79302 times by 1 test: break;
Executed by:
  • Self test
79302
162 }-
163 }
executed 79810 times by 1 test: end of block
Executed by:
  • Self test
79810
164-
165 return ret;
executed 79303 times by 1 test: return ret;
Executed by:
  • Self test
79303
166}-
167-
168static int-
169cclass_test (c, char_class)-
170 int c;-
171 enum char_class char_class;-
172{-
173 int result;-
174-
175 switch (char_class)-
176 {-
177 case CC_ASCII:
executed 3 times by 1 test: case CC_ASCII:
Executed by:
  • Self test
3
178 result = isascii (c);-
179 break;
executed 3 times by 1 test: break;
Executed by:
  • Self test
3
180 case CC_ALNUM:
executed 79193 times by 1 test: case CC_ALNUM:
Executed by:
  • Self test
79193
181 result = ISALNUM (c);
((*__ctype_b_l...int) _ISalnum)Description
TRUEevaluated 71163 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 8030 times by 1 test
Evaluated by:
  • Self test
8030-71163
182 break;
executed 79193 times by 1 test: break;
Executed by:
  • Self test
79193
183 case CC_ALPHA:
executed 49 times by 1 test: case CC_ALPHA:
Executed by:
  • Self test
49
184 result = ISALPHA (c);
((*__ctype_b_l...int) _ISalpha)Description
TRUEevaluated 35 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 14 times by 1 test
Evaluated by:
  • Self test
14-35
185 break;
executed 49 times by 1 test: break;
Executed by:
  • Self test
49
186 case CC_BLANK:
executed 2 times by 1 test: case CC_BLANK:
Executed by:
  • Self test
2
187 result = ISBLANK (c);
((*__ctype_b_l...int) _ISblank)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
1
188 break;
executed 2 times by 1 test: break;
Executed by:
  • Self test
2
189 case CC_CNTRL:
executed 2 times by 1 test: case CC_CNTRL:
Executed by:
  • Self test
2
190 result = ISCNTRL (c);
((*__ctype_b_l...int) _IScntrl)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
1
191 break;
executed 2 times by 1 test: break;
Executed by:
  • Self test
2
192 case CC_DIGIT:
executed 2 times by 1 test: case CC_DIGIT:
Executed by:
  • Self test
2
193 result = ISDIGIT (c);
((*__ctype_b_l...int) _ISdigit)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
1
194 break;
executed 2 times by 1 test: break;
Executed by:
  • Self test
2
195 case CC_GRAPH:
executed 6 times by 1 test: case CC_GRAPH:
Executed by:
  • Self test
6
196 result = ISGRAPH (c);
((*__ctype_b_l...int) _ISgraph)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test
2-4
197 break;
executed 6 times by 1 test: break;
Executed by:
  • Self test
6
198 case CC_LOWER:
executed 1 time by 1 test: case CC_LOWER:
Executed by:
  • Self test
1
199 result = ISLOWER (c);
((*__ctype_b_l...int) _ISlower)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-1
200 break;
executed 1 time by 1 test: break;
Executed by:
  • Self test
1
201 case CC_PRINT:
executed 2 times by 1 test: case CC_PRINT:
Executed by:
  • Self test
2
202 result = ISPRINT (c);
((*__ctype_b_l...int) _ISprint)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
1
203 break;
executed 2 times by 1 test: break;
Executed by:
  • Self test
2
204 case CC_PUNCT:
executed 2 times by 1 test: case CC_PUNCT:
Executed by:
  • Self test
2
205 result = ISPUNCT (c);
((*__ctype_b_l...int) _ISpunct)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
1
206 break;
executed 2 times by 1 test: break;
Executed by:
  • Self test
2
207 case CC_SPACE:
executed 38 times by 1 test: case CC_SPACE:
Executed by:
  • Self test
38
208 result = ISSPACE (c);
((*__ctype_b_l...int) _ISspace)Description
TRUEevaluated 12 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 26 times by 1 test
Evaluated by:
  • Self test
12-26
209 break;
executed 38 times by 1 test: break;
Executed by:
  • Self test
38
210 case CC_UPPER:
executed 1 time by 1 test: case CC_UPPER:
Executed by:
  • Self test
1
211 result = ISUPPER (c);
((*__ctype_b_l...int) _ISupper)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-1
212 break;
executed 1 time by 1 test: break;
Executed by:
  • Self test
1
213 case CC_WORD:
never executed: case CC_WORD:
0
214 result = (ISALNUM (c) || c == '_');
((*__ctype_b_l...int) _ISalnum)Description
TRUEnever evaluated
FALSEnever evaluated
c == '_'Description
TRUEnever evaluated
FALSEnever evaluated
0
215 break;
never executed: break;
0
216 case CC_XDIGIT:
executed 1 time by 1 test: case CC_XDIGIT:
Executed by:
  • Self test
1
217 result = ISXDIGIT (c);
((*__ctype_b_l...nt) _ISxdigit)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-1
218 break;
executed 1 time by 1 test: break;
Executed by:
  • Self test
1
219 default:
never executed: default:
0
220 result = -1;-
221 break;
never executed: break;
0
222 }-
223-
224 return result;
executed 79302 times by 1 test: return result;
Executed by:
  • Self test
79302
225}-
226 -
227static int-
228is_cclass (c, name)-
229 int c;-
230 const char *name;-
231{-
232 enum char_class char_class;-
233 int result;-
234-
235 char_class = is_valid_cclass (name);-
236 if (char_class == CC_NO_CLASS)
char_class == CC_NO_CLASSDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 79302 times by 1 test
Evaluated by:
  • Self test
1-79302
237 return -1;
executed 1 time by 1 test: return -1;
Executed by:
  • Self test
1
238-
239 result = cclass_test (c, char_class);-
240 return (result);
executed 79302 times by 1 test: return (result);
Executed by:
  • Self test
79302
241}-
242-
243/* Now include `sm_loop.c' for single-byte characters. */-
244/* The result of FOLD is an `unsigned char' */-
245# define FOLD(c) ((flags & FNM_CASEFOLD) \-
246 ? TOLOWER ((unsigned char)c) \-
247 : ((unsigned char)c))-
248-
249#define FCT internal_strmatch-
250#define GMATCH gmatch-
251#define COLLSYM collsym-
252#define PARSE_COLLSYM parse_collsym-
253#define BRACKMATCH brackmatch-
254#define PATSCAN glob_patscan-
255#define STRCOMPARE strcompare-
256#define EXTMATCH extmatch-
257#define STRUCT smat_struct-
258#define STRCHR(S, C) strchr((S), (C))-
259#define MEMCHR(S, C, N) memchr((S), (C), (N))-
260#define STRCOLL(S1, S2) strcoll((S1), (S2))-
261#define STRLEN(S) strlen(S)-
262#define STRCMP(S1, S2) strcmp((S1), (S2))-
263#define RANGECMP(C1, C2, F) rangecmp((C1), (C2), (F))-
264#define COLLEQUIV(C1, C2) collequiv((C1), (C2))-
265#define CTYPE_T enum char_class-
266#define IS_CCLASS(C, S) is_cclass((C), (S))-
267#include "sm_loop.c"-
268-
269#if HANDLE_MULTIBYTE-
270-
271# define CHAR wchar_t-
272# define U_CHAR wint_t-
273# define XCHAR wchar_t-
274# define INT wint_t-
275# define L(CS) L##CS-
276# define INVALID WEOF-
277-
278# undef STREQ-
279# undef STREQN-
280# define STREQ(s1, s2) ((wcscmp (s1, s2) == 0))-
281# define STREQN(a, b, n) ((a)[0] == (b)[0] && wcsncmp(a, b, n) == 0)-
282-
283extern char *mbsmbchar __P((const char *));-
284-
285static int-
286rangecmp_wc (c1, c2, forcecoll)-
287 wint_t c1, c2;-
288 int forcecoll;-
289{-
290 static wchar_t s1[2] = { L' ', L'\0' };-
291 static wchar_t s2[2] = { L' ', L'\0' };-
292-
293 if (c1 == c2)
c1 == c2Description
TRUEevaluated 136 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 152 times by 1 test
Evaluated by:
  • Self test
136-152
294 return 0;
executed 136 times by 1 test: return 0;
Executed by:
  • Self test
136
295-
296 if (forcecoll == 0 && glob_asciirange && c1 <= UCHAR_MAX && c2 <= UCHAR_MAX)
forcecoll == 0Description
TRUEevaluated 152 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
glob_asciirangeDescription
TRUEnever evaluated
FALSEevaluated 152 times by 1 test
Evaluated by:
  • Self test
c1 <= (0x7f * 2 + 1)Description
TRUEnever evaluated
FALSEnever evaluated
c2 <= (0x7f * 2 + 1)Description
TRUEnever evaluated
FALSEnever evaluated
0-152
297 return ((int)(c1 - c2));
never executed: return ((int)(c1 - c2));
0
298-
299 s1[0] = c1;-
300 s2[0] = c2;-
301-
302 return (wcscoll (s1, s2));
executed 152 times by 1 test: return (wcscoll (s1, s2));
Executed by:
  • Self test
152
303}-
304-
305static int-
306collequiv_wc (c, equiv)-
307 wint_t c, equiv;-
308{-
309 return (c == equiv);
never executed: return (c == equiv);
0
310}-
311-
312/* Helper function for collating symbol. */-
313# define _COLLSYM _collwcsym-
314# define __COLLSYM __collwcsym-
315# define POSIXCOLL posix_collwcsyms-
316# include "collsyms.h"-
317-
318static wint_t-
319collwcsym (s, len)-
320 wchar_t *s;-
321 int len;-
322{-
323 register struct _collwcsym *csp;-
324-
325 for (csp = posix_collwcsyms; csp->name; csp++)
csp->nameDescription
TRUEnever evaluated
FALSEnever evaluated
0
326 {-
327 if (STREQN(csp->name, s, len) && csp->name[len] == L'\0')
(csp->name)[0] == (s)[0]Description
TRUEnever evaluated
FALSEnever evaluated
wcsncmp(csp->n..., s, len) == 0Description
TRUEnever evaluated
FALSEnever evaluated
csp->name[len] == L'\0'Description
TRUEnever evaluated
FALSEnever evaluated
0
328 return (csp->code);
never executed: return (csp->code);
0
329 }
never executed: end of block
0
330 if (len == 1)
len == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
331 return s[0];
never executed: return s[0];
0
332 return INVALID;
never executed: return (0xffffffffu) ;
0
333}-
334-
335static int-
336is_wcclass (wc, name)-
337 wint_t wc;-
338 wchar_t *name;-
339{-
340 char *mbs;-
341 mbstate_t state;-
342 size_t mbslength;-
343 wctype_t desc;-
344 int want_word;-
345-
346 if ((wctype ("ascii") == (wctype_t)0) && (wcscmp (name, L"ascii") == 0))
(wctype ("asci...= (wctype_t)0)Description
TRUEnever evaluated
FALSEnever evaluated
(wcscmp (name, L"ascii") == 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
347 {-
348 int c;-
349-
350 if ((c = wctob (wc)) == EOF)
(c = wctob (wc)) == (-1)Description
TRUEnever evaluated
FALSEnever evaluated
0
351 return 0;
never executed: return 0;
0
352 else-
353 return (c <= 0x7F);
never executed: return (c <= 0x7F);
0
354 }-
355-
356 want_word = (wcscmp (name, L"word") == 0);-
357 if (want_word)
want_wordDescription
TRUEnever evaluated
FALSEnever evaluated
0
358 name = L"alnum";
never executed: name = L"alnum";
0
359-
360 memset (&state, '\0', sizeof (mbstate_t));-
361 mbs = (char *) malloc (wcslen(name) * MB_CUR_MAX + 1);-
362 if (mbs == 0)
mbs == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
363 return -1;
never executed: return -1;
0
364 mbslength = wcsrtombs (mbs, (const wchar_t **)&name, (wcslen(name) * MB_CUR_MAX + 1), &state);-
365-
366 if (mbslength == (size_t)-1 || mbslength == (size_t)-2)
mbslength == (size_t)-1Description
TRUEnever evaluated
FALSEnever evaluated
mbslength == (size_t)-2Description
TRUEnever evaluated
FALSEnever evaluated
0
367 {-
368 free (mbs);-
369 return -1;
never executed: return -1;
0
370 }-
371 desc = wctype (mbs);-
372 free (mbs);-
373-
374 if (desc == (wctype_t)0)
desc == (wctype_t)0Description
TRUEnever evaluated
FALSEnever evaluated
0
375 return -1;
never executed: return -1;
0
376-
377 if (want_word)
want_wordDescription
TRUEnever evaluated
FALSEnever evaluated
0
378 return (iswctype (wc, desc) || wc == L'_');
never executed: return (iswctype (wc, desc) || wc == L'_');
0
379 else-
380 return (iswctype (wc, desc));
never executed: return (iswctype (wc, desc));
0
381}-
382-
383/* Now include `sm_loop.c' for multibyte characters. */-
384#define FOLD(c) ((flags & FNM_CASEFOLD) && iswupper (c) ? towlower (c) : (c))-
385#define FCT internal_wstrmatch-
386#define GMATCH gmatch_wc-
387#define COLLSYM collwcsym-
388#define PARSE_COLLSYM parse_collwcsym-
389#define BRACKMATCH brackmatch_wc-
390#define PATSCAN glob_patscan_wc-
391#define STRCOMPARE wscompare-
392#define EXTMATCH extmatch_wc-
393#define STRUCT wcsmat_struct-
394#define STRCHR(S, C) wcschr((S), (C))-
395#define MEMCHR(S, C, N) wmemchr((S), (C), (N))-
396#define STRCOLL(S1, S2) wcscoll((S1), (S2))-
397#define STRLEN(S) wcslen(S)-
398#define STRCMP(S1, S2) wcscmp((S1), (S2))-
399#define RANGECMP(C1, C2, F) rangecmp_wc((C1), (C2), (F))-
400#define COLLEQUIV(C1, C2) collequiv_wc((C1), (C2))-
401#define CTYPE_T enum char_class-
402#define IS_CCLASS(C, S) is_wcclass((C), (S))-
403#include "sm_loop.c"-
404-
405#endif /* HAVE_MULTIBYTE */-
406-
407int-
408xstrmatch (pattern, string, flags)-
409 char *pattern;-
410 char *string;-
411 int flags;-
412{-
413#if HANDLE_MULTIBYTE-
414 int ret;-
415 size_t n;-
416 wchar_t *wpattern, *wstring;-
417 size_t plen, slen, mplen, mslen;-
418-
419 if (MB_CUR_MAX == 1)
(__ctype_get_m...r_max ()) == 1Description
TRUEevaluated 133719 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 48689929 times by 1 test
Evaluated by:
  • Self test
133719-48689929
420 return (internal_strmatch ((unsigned char *)pattern, (unsigned char *)string, flags));
executed 133719 times by 1 test: return (internal_strmatch ((unsigned char *)pattern, (unsigned char *)string, flags));
Executed by:
  • Self test
133719
421-
422 if (mbsmbchar (string) == 0 && mbsmbchar (pattern) == 0)
mbsmbchar (string) == 0Description
TRUEevaluated 48689920 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 9 times by 1 test
Evaluated by:
  • Self test
mbsmbchar (pattern) == 0Description
TRUEevaluated 48689920 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-48689920
423 return (internal_strmatch ((unsigned char *)pattern, (unsigned char *)string, flags));
executed 48689920 times by 1 test: return (internal_strmatch ((unsigned char *)pattern, (unsigned char *)string, flags));
Executed by:
  • Self test
48689920
424-
425 n = xdupmbstowcs (&wpattern, NULL, pattern);-
426 if (n == (size_t)-1 || n == (size_t)-2)
n == (size_t)-1Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test
n == (size_t)-2Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test
0-5
427 return (internal_strmatch ((unsigned char *)pattern, (unsigned char *)string, flags));
executed 5 times by 1 test: return (internal_strmatch ((unsigned char *)pattern, (unsigned char *)string, flags));
Executed by:
  • Self test
5
428-
429 n = xdupmbstowcs (&wstring, NULL, string);-
430 if (n == (size_t)-1 || n == (size_t)-2)
n == (size_t)-1Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test
n == (size_t)-2Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test
0-4
431 {-
432 free (wpattern);-
433 return (internal_strmatch ((unsigned char *)pattern, (unsigned char *)string, flags));
never executed: return (internal_strmatch ((unsigned char *)pattern, (unsigned char *)string, flags));
0
434 }-
435-
436 ret = internal_wstrmatch (wpattern, wstring, flags);-
437-
438 free (wpattern);-
439 free (wstring);-
440-
441 return ret;
executed 4 times by 1 test: return ret;
Executed by:
  • Self test
4
442#else-
443 return (internal_strmatch ((unsigned char *)pattern, (unsigned char *)string, flags));-
444#endif /* !HANDLE_MULTIBYTE */-
445}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2