OpenCoverage

gmisc.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/bash/src/lib/glob/gmisc.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* gmisc.c -- miscellaneous pattern matching utility functions for Bash.-
2-
3 Copyright (C) 2010-2017 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#include "bashtypes.h"-
24-
25#if defined (HAVE_UNISTD_H)-
26# include <unistd.h>-
27#endif-
28-
29#include "bashansi.h"-
30#include "shmbutil.h"-
31#include "chartypes.h"-
32-
33#include "stdc.h"-
34-
35#ifndef FNM_CASEFOLD-
36# include "strmatch.h"-
37#endif-
38#include "glob.h"-
39-
40/* Make sure these names continue to agree with what's in smatch.c */-
41extern char *glob_patscan __P((char *, char *, int));-
42-
43/* Compile `gm_loop.c' for single-byte characters. */-
44#define CHAR char-
45#define INT int-
46#define L(CS) CS-
47#define EXTGLOB_PATTERN_P extglob_pattern_p-
48#define MATCH_PATTERN_CHAR match_pattern_char-
49#define MATCHLEN umatchlen-
50#define FOLD(c) ((flags & FNM_CASEFOLD) \-
51 ? TOLOWER ((unsigned char)c) \-
52 : ((unsigned char)c))-
53#ifndef LPAREN-
54#define LPAREN '('-
55#define RPAREN ')'-
56#endif-
57#include "gm_loop.c"-
58-
59/* Compile `gm_loop.c' again for multibyte characters. */-
60#if HANDLE_MULTIBYTE-
61-
62#define CHAR wchar_t-
63#define INT wint_t-
64#define L(CS) L##CS-
65#define EXTGLOB_PATTERN_P wextglob_pattern_p-
66#define MATCH_PATTERN_CHAR match_pattern_wchar-
67#define MATCHLEN wmatchlen-
68-
69#define FOLD(c) ((flags & FNM_CASEFOLD) && iswupper (c) ? towlower (c) : (c))-
70#define LPAREN L'('-
71#define RPAREN L')'-
72#include "gm_loop.c"-
73-
74#endif /* HANDLE_MULTIBYTE */-
75-
76-
77#if defined (EXTENDED_GLOB)-
78/* Skip characters in PAT and return the final occurrence of DIRSEP. This-
79 is only called when extended_glob is set, so we have to skip over extglob-
80 patterns x(...) */-
81char *-
82glob_dirscan (pat, dirsep)-
83 char *pat;-
84 int dirsep;-
85{-
86 char *p, *d, *pe, *se;-
87-
88 d = pe = se = 0;-
89 for (p = pat; p && *p; p++)
pDescription
TRUEevaluated 30 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
*pDescription
TRUEevaluated 28 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
0-30
90 {-
91 if (extglob_pattern_p (p))
extglob_pattern_p (p)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 26 times by 1 test
Evaluated by:
  • Self test
2-26
92 {-
93 if (se == 0)
se == 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-2
94 se = p + strlen (p) - 1;
executed 2 times by 1 test: se = p + strlen (p) - 1;
Executed by:
  • Self test
2
95 pe = glob_patscan (p + 2, se, 0);-
96 if (pe == 0)
pe == 0Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
0-2
97 continue;
never executed: continue;
0
98 else if (*pe == 0)
*pe == 0Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
0-2
99 break;
never executed: break;
0
100 p = pe - 1; /* will do increment above */-
101 continue;
executed 2 times by 1 test: continue;
Executed by:
  • Self test
2
102 }-
103 if (*p == dirsep)
*p == dirsepDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 20 times by 1 test
Evaluated by:
  • Self test
6-20
104 d = p;
executed 6 times by 1 test: d = p;
Executed by:
  • Self test
6
105 }
executed 26 times by 1 test: end of block
Executed by:
  • Self test
26
106 return d;
executed 2 times by 1 test: return d;
Executed by:
  • Self test
2
107}-
108#endif /* EXTENDED_GLOB */-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2