| 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 */ |