Commit | Line | Data |
---|---|---|
5e8754f9 SDJ |
1 | /* Copyright (C) 1991-1992, 1995-1998, 2000-2001, 2004-2007, 2009-2016 Free |
2 | Software Foundation, Inc. | |
6ec2e0f5 SDJ |
3 | This file is part of the GNU C Library. |
4 | ||
5e8754f9 SDJ |
5 | This program is free software: you can redistribute it and/or modify |
6 | it under the terms of the GNU General Public License as published by | |
7 | the Free Software Foundation; either version 3 of the License, or | |
8 | (at your option) any later version. | |
6ec2e0f5 | 9 | |
5e8754f9 | 10 | This program is distributed in the hope that it will be useful, |
6ec2e0f5 | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
5e8754f9 SDJ |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | GNU General Public License for more details. | |
6ec2e0f5 | 14 | |
5e8754f9 SDJ |
15 | You should have received a copy of the GNU General Public License |
16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ | |
6ec2e0f5 SDJ |
17 | |
18 | #ifndef _GLOB_H | |
19 | #define _GLOB_H 1 | |
20 | ||
21 | #ifndef __GLOB_GNULIB | |
22 | # include <sys/cdefs.h> | |
23 | #endif | |
24 | ||
5e8754f9 SDJ |
25 | /* GCC 2.95 and later have "__restrict"; C99 compilers have |
26 | "restrict", and "configure" may have defined "restrict". | |
27 | Other compilers use __restrict, __restrict__, and _Restrict, and | |
28 | 'configure' might #define 'restrict' to those words, so pick a | |
29 | different name. */ | |
30 | #ifndef _Restrict_ | |
31 | # if 199901L <= __STDC_VERSION__ | |
32 | # define _Restrict_ restrict | |
33 | # elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__) | |
34 | # define _Restrict_ __restrict | |
35 | # else | |
36 | # define _Restrict_ | |
37 | # endif | |
38 | #endif | |
39 | ||
6ec2e0f5 SDJ |
40 | __BEGIN_DECLS |
41 | ||
5e8754f9 SDJ |
42 | /* We need 'size_t' for the following definitions. */ |
43 | #ifndef __size_t | |
44 | # if defined __GNUC__ && __GNUC__ >= 2 | |
45 | typedef __SIZE_TYPE__ __size_t; | |
46 | # ifdef __USE_XOPEN | |
47 | typedef __SIZE_TYPE__ size_t; | |
48 | # endif | |
49 | # else | |
50 | # include <stddef.h> | |
51 | # ifndef __size_t | |
52 | # define __size_t size_t | |
53 | # endif | |
54 | # endif | |
55 | #else | |
56 | /* The GNU CC stddef.h version defines __size_t as empty. We need a real | |
57 | definition. */ | |
58 | # undef __size_t | |
59 | # define __size_t size_t | |
60 | #endif | |
6ec2e0f5 SDJ |
61 | |
62 | /* Bits set in the FLAGS argument to 'glob'. */ | |
63 | #define GLOB_ERR (1 << 0)/* Return on read errors. */ | |
64 | #define GLOB_MARK (1 << 1)/* Append a slash to each name. */ | |
65 | #define GLOB_NOSORT (1 << 2)/* Don't sort the names. */ | |
66 | #define GLOB_DOOFFS (1 << 3)/* Insert PGLOB->gl_offs NULLs. */ | |
67 | #define GLOB_NOCHECK (1 << 4)/* If nothing matches, return the pattern. */ | |
68 | #define GLOB_APPEND (1 << 5)/* Append to results of a previous call. */ | |
69 | #define GLOB_NOESCAPE (1 << 6)/* Backslashes don't quote metacharacters. */ | |
70 | #define GLOB_PERIOD (1 << 7)/* Leading '.' can be matched by metachars. */ | |
71 | ||
5e8754f9 | 72 | #if !defined __USE_POSIX2 || defined __USE_BSD || defined __USE_GNU |
6ec2e0f5 SDJ |
73 | # define GLOB_MAGCHAR (1 << 8)/* Set in gl_flags if any metachars seen. */ |
74 | # define GLOB_ALTDIRFUNC (1 << 9)/* Use gl_opendir et al functions. */ | |
75 | # define GLOB_BRACE (1 << 10)/* Expand "{a,b}" to "a" "b". */ | |
76 | # define GLOB_NOMAGIC (1 << 11)/* If no magic chars, return the pattern. */ | |
77 | # define GLOB_TILDE (1 << 12)/* Expand ~user and ~ to home directories. */ | |
78 | # define GLOB_ONLYDIR (1 << 13)/* Match only directories. */ | |
79 | # define GLOB_TILDE_CHECK (1 << 14)/* Like GLOB_TILDE but return an error | |
80 | if the user name is not available. */ | |
81 | # define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \ | |
82 | GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND| \ | |
83 | GLOB_PERIOD|GLOB_ALTDIRFUNC|GLOB_BRACE| \ | |
84 | GLOB_NOMAGIC|GLOB_TILDE|GLOB_ONLYDIR|GLOB_TILDE_CHECK) | |
85 | #else | |
86 | # define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \ | |
87 | GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND| \ | |
88 | GLOB_PERIOD) | |
89 | #endif | |
90 | ||
91 | /* Error returns from 'glob'. */ | |
92 | #define GLOB_NOSPACE 1 /* Ran out of memory. */ | |
93 | #define GLOB_ABORTED 2 /* Read error. */ | |
94 | #define GLOB_NOMATCH 3 /* No matches found. */ | |
95 | #define GLOB_NOSYS 4 /* Not implemented. */ | |
96 | #ifdef __USE_GNU | |
97 | /* Previous versions of this file defined GLOB_ABEND instead of | |
98 | GLOB_ABORTED. Provide a compatibility definition here. */ | |
99 | # define GLOB_ABEND GLOB_ABORTED | |
100 | #endif | |
101 | ||
102 | /* Structure describing a globbing run. */ | |
103 | #ifdef __USE_GNU | |
104 | struct stat; | |
105 | #endif | |
106 | typedef struct | |
107 | { | |
5e8754f9 | 108 | __size_t gl_pathc; /* Count of paths matched by the pattern. */ |
6ec2e0f5 | 109 | char **gl_pathv; /* List of matched pathnames. */ |
5e8754f9 | 110 | __size_t gl_offs; /* Slots to reserve in 'gl_pathv'. */ |
6ec2e0f5 SDJ |
111 | int gl_flags; /* Set to FLAGS, maybe | GLOB_MAGCHAR. */ |
112 | ||
113 | /* If the GLOB_ALTDIRFUNC flag is set, the following functions | |
114 | are used instead of the normal file access functions. */ | |
115 | void (*gl_closedir) (void *); | |
116 | #ifdef __USE_GNU | |
117 | struct dirent *(*gl_readdir) (void *); | |
118 | #else | |
119 | void *(*gl_readdir) (void *); | |
120 | #endif | |
121 | void *(*gl_opendir) (const char *); | |
122 | #ifdef __USE_GNU | |
5e8754f9 SDJ |
123 | int (*gl_lstat) (const char *_Restrict_, struct stat *_Restrict_); |
124 | int (*gl_stat) (const char *_Restrict_, struct stat *_Restrict_); | |
6ec2e0f5 | 125 | #else |
5e8754f9 SDJ |
126 | int (*gl_lstat) (const char *_Restrict_, void *_Restrict_); |
127 | int (*gl_stat) (const char *_Restrict_, void *_Restrict_); | |
6ec2e0f5 SDJ |
128 | #endif |
129 | } glob_t; | |
130 | ||
5e8754f9 | 131 | #if defined __USE_LARGEFILE64 && !defined __GLOB_GNULIB |
6ec2e0f5 SDJ |
132 | # ifdef __USE_GNU |
133 | struct stat64; | |
134 | # endif | |
135 | typedef struct | |
136 | { | |
5e8754f9 | 137 | __size_t gl_pathc; |
6ec2e0f5 | 138 | char **gl_pathv; |
5e8754f9 | 139 | __size_t gl_offs; |
6ec2e0f5 SDJ |
140 | int gl_flags; |
141 | ||
142 | /* If the GLOB_ALTDIRFUNC flag is set, the following functions | |
143 | are used instead of the normal file access functions. */ | |
144 | void (*gl_closedir) (void *); | |
145 | # ifdef __USE_GNU | |
146 | struct dirent64 *(*gl_readdir) (void *); | |
147 | # else | |
148 | void *(*gl_readdir) (void *); | |
149 | # endif | |
150 | void *(*gl_opendir) (const char *); | |
151 | # ifdef __USE_GNU | |
5e8754f9 SDJ |
152 | int (*gl_lstat) (const char *_Restrict_, struct stat64 *_Restrict_); |
153 | int (*gl_stat) (const char *_Restrict_, struct stat64 *_Restrict_); | |
6ec2e0f5 | 154 | # else |
5e8754f9 SDJ |
155 | int (*gl_lstat) (const char *_Restrict_, void *_Restrict_); |
156 | int (*gl_stat) (const char *_Restrict_, void *_Restrict_); | |
6ec2e0f5 SDJ |
157 | # endif |
158 | } glob64_t; | |
159 | #endif | |
160 | ||
5e8754f9 SDJ |
161 | #if __USE_FILE_OFFSET64 && __GNUC__ < 2 && !defined __GLOB_GNULIB |
162 | # define glob glob64 | |
163 | # define globfree globfree64 | |
164 | #endif | |
165 | ||
6ec2e0f5 SDJ |
166 | /* Do glob searching for PATTERN, placing results in PGLOB. |
167 | The bits defined above may be set in FLAGS. | |
168 | If a directory cannot be opened or read and ERRFUNC is not nil, | |
169 | it is called with the pathname that caused the error, and the | |
170 | 'errno' value from the failing call; if it returns non-zero | |
171 | 'glob' returns GLOB_ABEND; if it returns zero, the error is ignored. | |
172 | If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned. | |
173 | Otherwise, 'glob' returns zero. */ | |
5e8754f9 SDJ |
174 | #if !defined __USE_FILE_OFFSET64 || __GNUC__ < 2 || defined __GLOB_GNULIB |
175 | extern int glob (const char *_Restrict_ __pattern, int __flags, | |
6ec2e0f5 | 176 | int (*__errfunc) (const char *, int), |
5e8754f9 | 177 | glob_t *_Restrict_ __pglob) __THROW _GL_ARG_NONNULL ((1, 4)); |
6ec2e0f5 SDJ |
178 | |
179 | /* Free storage allocated in PGLOB by a previous 'glob' call. */ | |
5e8754f9 | 180 | extern void globfree (glob_t *__pglob) __THROW _GL_ARG_NONNULL ((1)); |
6ec2e0f5 | 181 | #else |
5e8754f9 | 182 | extern int __REDIRECT_NTH (glob, (const char *_Restrict_ __pattern, |
6ec2e0f5 SDJ |
183 | int __flags, |
184 | int (*__errfunc) (const char *, int), | |
5e8754f9 | 185 | glob_t *_Restrict_ __pglob), glob64); |
6ec2e0f5 SDJ |
186 | |
187 | extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64); | |
188 | #endif | |
189 | ||
5e8754f9 SDJ |
190 | #if defined __USE_LARGEFILE64 && !defined __GLOB_GNULIB |
191 | extern int glob64 (const char *_Restrict_ __pattern, int __flags, | |
6ec2e0f5 | 192 | int (*__errfunc) (const char *, int), |
5e8754f9 SDJ |
193 | glob64_t *_Restrict_ __pglob) |
194 | __THROW _GL_ARG_NONNULL ((1, 4)); | |
6ec2e0f5 | 195 | |
5e8754f9 | 196 | extern void globfree64 (glob64_t *__pglob) __THROW _GL_ARG_NONNULL ((1)); |
6ec2e0f5 SDJ |
197 | #endif |
198 | ||
199 | ||
200 | #ifdef __USE_GNU | |
201 | /* Return nonzero if PATTERN contains any metacharacters. | |
202 | Metacharacters can be quoted with backslashes if QUOTE is nonzero. | |
203 | ||
204 | This function is not part of the interface specified by POSIX.2 | |
205 | but several programs want to use it. */ | |
5e8754f9 SDJ |
206 | extern int glob_pattern_p (const char *__pattern, int __quote) |
207 | __THROW _GL_ARG_NONNULL ((1)); | |
6ec2e0f5 SDJ |
208 | #endif |
209 | ||
210 | __END_DECLS | |
211 | ||
212 | #endif /* glob.h */ |