1 |
#ifndef _GLOB_H |
2 |
/* |
3 |
* glob.h |
4 |
* |
5 |
* Header file supporting a MinGW implementation of an (approximately) |
6 |
* POSIX conforming glob() and globfree() API. |
7 |
* |
8 |
* $Id: glob.h,v 21b61b814e54 2016/07/10 21:38:45 keithmarshall $ |
9 |
* |
10 |
* Written by Keith Marshall <keithmarshall@users.sourceforge.net> |
11 |
* Copyright (C) 2011, 2012, 2014, 2016, MinGW.org Project. |
12 |
* |
13 |
* |
14 |
* Permission is hereby granted, free of charge, to any person obtaining a |
15 |
* copy of this software and associated documentation files (the "Software"), |
16 |
* to deal in the Software without restriction, including without limitation |
17 |
* the rights to use, copy, modify, merge, publish, distribute, sublicense, |
18 |
* and/or sell copies of the Software, and to permit persons to whom the |
19 |
* Software is furnished to do so, subject to the following conditions: |
20 |
* |
21 |
* The above copyright notice, this permission notice, and the following |
22 |
* disclaimer shall be included in all copies or substantial portions of |
23 |
* the Software. |
24 |
* |
25 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
26 |
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
27 |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
28 |
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
29 |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
30 |
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OF OR OTHER |
31 |
* DEALINGS IN THE SOFTWARE. |
32 |
* |
33 |
*/ |
34 |
#define _GLOB_H 1 |
35 |
#include <_mingw.h> |
36 |
#pragma GCC system_header |
37 |
|
38 |
#ifndef RC_INVOKED |
39 |
/* POSIX requires glob.h to define the size_t type; we need to |
40 |
* get this from GCC, just as sys/types.h does. |
41 |
*/ |
42 |
#define __need_size_t |
43 |
#include <stddef.h> |
44 |
|
45 |
typedef |
46 |
struct glob_t |
47 |
{ /* The structure, in which glob() returns the list of file system |
48 |
* entities which it has matched. |
49 |
*/ |
50 |
void * gl_magic; /* reserved field; pointer to a glob signature */ |
51 |
size_t gl_pathc; /* counter for paths matched */ |
52 |
char ** gl_pathv; /* list of matching path names */ |
53 |
size_t gl_offs; /* number of initial unused slots in gl_pathv */ |
54 |
} glob_t; |
55 |
|
56 |
/* A macro to facilitate definition of the flags which are used to |
57 |
* control the operation of glob(). |
58 |
*/ |
59 |
#define __GLOB_FLAG__(NAME) (1 << __GLOB_##NAME##_OFFSET) |
60 |
enum { |
61 |
/* Identify the zero-based offset values which are used to specify |
62 |
* the individual bit positions for each __GLOB_FLAG; the initial |
63 |
* list specifies the standard set of flags required by POSIX. |
64 |
*/ |
65 |
__GLOB_APPEND_OFFSET = 0, |
66 |
__GLOB_DOOFFS_OFFSET, |
67 |
__GLOB_ERR_OFFSET, |
68 |
__GLOB_MARK_OFFSET, |
69 |
__GLOB_NOCHECK_OFFSET, |
70 |
__GLOB_NOESCAPE_OFFSET, |
71 |
__GLOB_NOSORT_OFFSET, |
72 |
/* |
73 |
* GNU's implementation of glob() supports a supplementary set of |
74 |
* options, none of which are required by POSIX. We include these |
75 |
* for reference, and to reserve the flag identities for a possible |
76 |
* future implementation; the current MinGW implementation does not |
77 |
* support them. |
78 |
*/ |
79 |
__GLOB_TILDE_OFFSET, |
80 |
__GLOB_TILDE_CHECK_OFFSET, |
81 |
__GLOB_PERIOD_OFFSET, |
82 |
__GLOB_BRACE_OFFSET, |
83 |
__GLOB_ONLYDIR_OFFSET, |
84 |
__GLOB_ALTDIRFUNC_OFFSET, |
85 |
__GLOB_NOMAGIC_OFFSET, |
86 |
/* |
87 |
* This MinGW implementation DOES add support for the following |
88 |
* custom options, which offer improved handling of MS-Windows |
89 |
* specific peculiarities:-- |
90 |
* |
91 |
* GLOB_CASEMATCH makes glob() respect case sensitivity |
92 |
* in path name matches; this is similar |
93 |
* to default behaviour on POSIX systems, |
94 |
* but to better support the MS-Windows |
95 |
* file system, the MinGW implementation |
96 |
* of glob() performs a CASE INSENSITIVE |
97 |
* character match by default, (except |
98 |
* when matching within character group |
99 |
* patterns, which are ALWAYS assumed to |
100 |
* require CASE SENSITIVE matching). |
101 |
*/ |
102 |
__GLOB_CASEMATCH_OFFSET, |
103 |
/* |
104 |
* The following is a convenience, to mark the end of the enumeration; |
105 |
* it is NEVER used to locate any user visible __GLOB_FLAG__, but it |
106 |
* MUST remain as the final entry in the enumerated list. |
107 |
*/ |
108 |
__GLOB_FLAG_OFFSET_HIGH_WATER_MARK |
109 |
}; |
110 |
|
111 |
/* Definitions of the mandatory flags, as specified by POSIX. |
112 |
*/ |
113 |
#define GLOB_APPEND __GLOB_FLAG__(APPEND) |
114 |
#define GLOB_DOOFFS __GLOB_FLAG__(DOOFFS) |
115 |
#define GLOB_ERR __GLOB_FLAG__(ERR) |
116 |
#define GLOB_MARK __GLOB_FLAG__(MARK) |
117 |
#define GLOB_NOCHECK __GLOB_FLAG__(NOCHECK) |
118 |
#define GLOB_NOESCAPE __GLOB_FLAG__(NOESCAPE) |
119 |
#define GLOB_NOSORT __GLOB_FLAG__(NOSORT) |
120 |
|
121 |
/* Additional flags definitions, for MinGW specific extensions. |
122 |
*/ |
123 |
#define GLOB_CASEMATCH __GLOB_FLAG__(CASEMATCH) |
124 |
|
125 |
_BEGIN_C_DECLS |
126 |
/* |
127 |
* Function prototypes. Formally POSIX mandates: |
128 |
* |
129 |
* int glob( const char *, int, int (*)( const char *, int ), glob_t * ); |
130 |
* void globfree( glob_t * ); |
131 |
* |
132 |
* However, our actual function implementations are provided via this |
133 |
* pair of reserved function names... |
134 |
*/ |
135 |
int __mingw_glob (const char *, int, int (*)(const char *, int), glob_t *); |
136 |
void __mingw_globfree (glob_t *); |
137 |
|
138 |
/* ...to which the standard names are then mapped as aliases, |
139 |
* via __CRT_ALIAS inline function expansion. |
140 |
*/ |
141 |
__CRT_ALIAS __JMPSTUB__(( FUNCTION = glob )) |
142 |
# define __ERRFUNC_P (*__errfunc) (const char *, int) |
143 |
int glob (const char *__pattern, int __flags, int __ERRFUNC_P, glob_t *__data) |
144 |
{ return __mingw_glob (__pattern, __flags, __errfunc, __data); } |
145 |
# undef __ERRFUNC_P |
146 |
|
147 |
__CRT_ALIAS __JMPSTUB__(( FUNCTION = globfree )) |
148 |
void globfree (glob_t *__data){ return __mingw_globfree (__data); } |
149 |
|
150 |
_END_C_DECLS |
151 |
|
152 |
/* Manifest definitions for the possible status values |
153 |
* which glob() may return. |
154 |
*/ |
155 |
#define GLOB_SUCCESS (0) |
156 |
#define GLOB_ABORTED (1) |
157 |
#define GLOB_NOMATCH (2) |
158 |
#define GLOB_NOSPACE (3) |
159 |
|
160 |
#endif /* ! RC_INVOKED */ |
161 |
#endif /* ! defined _GLOB_H */ |