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