| Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/bash/src/lib/glob/gmisc.c |
| Source code | Switch to Preprocessed file |
| Line | Source | Count | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 */ | - | ||||||||||||
| 41 | extern 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(...) */ | - | ||||||||||||
| 81 | char * | - | ||||||||||||
| 82 | glob_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++)
| 0-30 | ||||||||||||
| 90 | { | - | ||||||||||||
| 91 | if (extglob_pattern_p (p))
| 2-26 | ||||||||||||
| 92 | { | - | ||||||||||||
| 93 | if (se == 0)
| 0-2 | ||||||||||||
| 94 | se = p + strlen (p) - 1; executed 2 times by 1 test: se = p + strlen (p) - 1;Executed by:
| 2 | ||||||||||||
| 95 | pe = glob_patscan (p + 2, se, 0); | - | ||||||||||||
| 96 | if (pe == 0)
| 0-2 | ||||||||||||
| 97 | continue; never executed: continue; | 0 | ||||||||||||
| 98 | else if (*pe == 0)
| 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:
| 2 | ||||||||||||
| 102 | } | - | ||||||||||||
| 103 | if (*p == dirsep)
| 6-20 | ||||||||||||
| 104 | d = p; executed 6 times by 1 test: d = p;Executed by:
| 6 | ||||||||||||
| 105 | } executed 26 times by 1 test: end of blockExecuted by:
| 26 | ||||||||||||
| 106 | return d; executed 2 times by 1 test: return d;Executed by:
| 2 | ||||||||||||
| 107 | } | - | ||||||||||||
| 108 | #endif /* EXTENDED_GLOB */ | - | ||||||||||||
| Source code | Switch to Preprocessed file |