]> git.ipfire.org Git - thirdparty/bash.git/blame - pathexp.h
Bash-4.3 patch 7
[thirdparty/bash.git] / pathexp.h
CommitLineData
ccc6cda3
JA
1/* pathexp.h -- The shell interface to the globbing library. */
2
3185942a 3/* Copyright (C) 1987-2009 Free Software Foundation, Inc.
ccc6cda3
JA
4
5 This file is part of GNU Bash, the Bourne Again SHell.
6
3185942a
JA
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.
ccc6cda3 11
3185942a
JA
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.
ccc6cda3 16
3185942a
JA
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*/
ccc6cda3
JA
20
21#if !defined (_PATHEXP_H_)
22#define _PATHEXP_H_
23
24#if defined (USE_POSIX_GLOB_LIBRARY)
25# define GLOB_FAILED(glist) !(glist)
26#else /* !USE_POSIX_GLOB_LIBRARY */
27# define GLOB_FAILED(glist) (glist) == (char **)&glob_error_return
28extern int noglob_dot_filenames;
29extern char *glob_error_return;
30#endif /* !USE_POSIX_GLOB_LIBRARY */
31
cce855bc
JA
32/* Flag values for quote_string_for_globbing */
33#define QGLOB_CVTNULL 0x01 /* convert QUOTED_NULL strings to '\0' */
34#define QGLOB_FILENAME 0x02 /* do correct quoting for matching filenames */
f1be666c 35#define QGLOB_REGEXP 0x04 /* quote an ERE for regcomp/regexec */
cce855bc
JA
36
37#if defined (EXTENDED_GLOB)
f73dda09 38/* Flags to OR with other flag args to strmatch() to enabled the extended
cce855bc
JA
39 pattern matching. */
40# define FNMATCH_EXTFLAG (extended_glob ? FNM_EXTMATCH : 0)
41#else
42# define FNMATCH_EXTFLAG 0
43#endif /* !EXTENDED_GLOB */
44
95732b49
JA
45#define FNMATCH_IGNCASE (match_ignore_case ? FNM_CASEFOLD : 0)
46
ccc6cda3 47extern int glob_dot_filenames;
cce855bc 48extern int extended_glob;
3185942a 49extern int glob_star;
95732b49 50extern int match_ignore_case; /* doesn't really belong here */
ccc6cda3
JA
51
52extern int unquoted_glob_pattern_p __P((char *));
53
cce855bc 54/* PATHNAME can contain characters prefixed by CTLESC; this indicates
ccc6cda3 55 that the character is to be quoted. We quote it here in the style
cce855bc 56 that the glob library recognizes. If flags includes QGLOB_CVTNULL,
ccc6cda3
JA
57 we change quoted null strings (pathname[0] == CTLNUL) into empty
58 strings (pathname[0] == 0). If this is called after quote removal
cce855bc 59 is performed, (flags & QGLOB_CVTNULL) should be 0; if called when quote
ccc6cda3 60 removal has not been done (for example, before attempting to match a
cce855bc
JA
61 pattern while executing a case statement), flags should include
62 QGLOB_CVTNULL. If flags includes QGLOB_FILENAME, appropriate quoting
63 to match a filename should be performed. */
28ef6c31 64extern char *quote_string_for_globbing __P((const char *, int));
ccc6cda3 65
3185942a 66extern int glob_char_p __P((const char *));
ccc6cda3
JA
67extern char *quote_globbing_chars __P((char *));
68
69/* Call the glob library to do globbing on PATHNAME. */
28ef6c31 70extern char **shell_glob_filename __P((const char *));
ccc6cda3 71
f73dda09 72/* Filename completion ignore. Used to implement the "fignore" facility of
ccc6cda3
JA
73 tcsh and GLOBIGNORE (like ksh-93 FIGNORE).
74
75 It is passed a NULL-terminated array of (char *)'s that must be
76 free()'d if they are deleted. The first element (names[0]) is the
77 least-common-denominator string of the matching patterns (i.e.
78 u<TAB> produces names[0] = "und", names[1] = "under.c", names[2] =
79 "undun.c", name[3] = NULL). */
80
81struct ign {
82 char *val;
83 int len, flags;
84};
85
f73dda09
JA
86typedef int sh_iv_item_func_t __P((struct ign *));
87
ccc6cda3
JA
88struct ignorevar {
89 char *varname; /* FIGNORE or GLOBIGNORE */
90 struct ign *ignores; /* Store the ignore strings here */
91 int num_ignores; /* How many are there? */
92 char *last_ignoreval; /* Last value of variable - cached for speed */
f73dda09 93 sh_iv_item_func_t *item_func; /* Called when each item is parsed from $`varname' */
ccc6cda3
JA
94};
95
96extern void setup_ignore_patterns __P((struct ignorevar *));
97
98extern void setup_glob_ignore __P((char *));
99extern int should_ignore_glob_matches __P((void));
100extern void ignore_glob_matches __P((char **));
101
102#endif