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