This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/MinGW/include/glob.h

167 lines
5.8 KiB
C

#ifndef _GLOB_H
/*
* glob.h
*
* Header file supporting a MinGW implementation of an (approximately)
* POSIX conforming glob() and globfree() API.
*
* $Id: glob.h,v 441f10158594 2017/02/12 10:12:06 keithmarshall $
*
* Written by Keith Marshall <keithmarshall@users.sourceforge.net>
* Copyright (C) 2011, 2012, 2014, 2016, 2017, MinGW.org Project.
*
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice, this permission notice, and the following
* disclaimer shall be included in all copies or substantial portions of
* the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OF OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
#define _GLOB_H 1
#pragma GCC system_header
/* All MinGW.org system headers are required to include <_mingw.h>.
*/
#include <_mingw.h>
#ifndef RC_INVOKED
/* POSIX requires glob.h to define the size_t type; we need to
* get this from GCC's <stddef.h>, just as <sys/types.h> does.
*/
#define __need_size_t
#include <stddef.h>
typedef
struct glob_t
{ /* The structure, in which glob() returns the list of file system
* entities which it has matched.
*/
void * gl_magic; /* reserved field; pointer to a glob signature */
size_t gl_pathc; /* counter for paths matched */
char ** gl_pathv; /* list of matching path names */
size_t gl_offs; /* number of initial unused slots in gl_pathv */
} glob_t;
/* A macro to facilitate definition of the flags which are used to
* control the operation of glob().
*/
#define __GLOB_FLAG__(NAME) (1 << __GLOB_##NAME##_OFFSET)
enum {
/* Identify the zero-based offset values which are used to specify
* the individual bit positions for each __GLOB_FLAG; the initial
* list specifies the standard set of flags required by POSIX.
*/
__GLOB_APPEND_OFFSET = 0,
__GLOB_DOOFFS_OFFSET,
__GLOB_ERR_OFFSET,
__GLOB_MARK_OFFSET,
__GLOB_NOCHECK_OFFSET,
__GLOB_NOESCAPE_OFFSET,
__GLOB_NOSORT_OFFSET,
/*
* GNU's implementation of glob() supports a supplementary set of
* options, none of which are required by POSIX. We include these
* for reference, and to reserve the flag identities for a possible
* future implementation; of these extensions, the current MinGW
* implementation supports only GLOB_BRACE.
*/
__GLOB_TILDE_OFFSET,
__GLOB_TILDE_CHECK_OFFSET,
__GLOB_PERIOD_OFFSET,
__GLOB_BRACE_OFFSET,
__GLOB_ONLYDIR_OFFSET,
__GLOB_ALTDIRFUNC_OFFSET,
__GLOB_NOMAGIC_OFFSET,
/*
* This MinGW implementation DOES add support for the following
* custom options, which offer improved handling of MS-Windows
* specific peculiarities:--
*
* GLOB_CASEMATCH makes glob() respect case sensitivity
* in path name matches; this is similar
* to default behaviour on POSIX systems,
* but to better support the MS-Windows
* file system, the MinGW implementation
* of glob() performs a CASE INSENSITIVE
* character match by default.
*/
__GLOB_CASEMATCH_OFFSET,
/*
* The following is a convenience, to mark the end of the enumeration;
* it is NEVER used to locate any user visible __GLOB_FLAG__, but it
* MUST remain as the final entry in the enumerated list.
*/
__GLOB_FLAG_OFFSET_HIGH_WATER_MARK
};
/* Definitions of the mandatory flags, as specified by POSIX.
*/
#define GLOB_APPEND __GLOB_FLAG__(APPEND)
#define GLOB_DOOFFS __GLOB_FLAG__(DOOFFS)
#define GLOB_ERR __GLOB_FLAG__(ERR)
#define GLOB_MARK __GLOB_FLAG__(MARK)
#define GLOB_NOCHECK __GLOB_FLAG__(NOCHECK)
#define GLOB_NOESCAPE __GLOB_FLAG__(NOESCAPE)
#define GLOB_NOSORT __GLOB_FLAG__(NOSORT)
/* Flag definitions for those GNU extensions, as listed above, for which
* we provide support; (i.e. GLOB_BRACE only, at present).
*/
#define GLOB_BRACE __GLOB_FLAG__(BRACE)
/* Additional flags definitions, for MinGW specific extensions.
*/
#define GLOB_CASEMATCH __GLOB_FLAG__(CASEMATCH)
_BEGIN_C_DECLS
/*
* Function prototypes. Formally POSIX mandates:
*
* int glob( const char *, int, int (*)( const char *, int ), glob_t * );
* void globfree( glob_t * );
*
* However, our actual function implementations are provided via this
* pair of reserved function names...
*/
int __mingw_glob (const char *, int, int (*)(const char *, int), glob_t *);
void __mingw_globfree (glob_t *);
/* ...to which the standard names are then mapped as aliases,
* via __CRT_ALIAS inline function expansion.
*/
__CRT_ALIAS __JMPSTUB__(( FUNCTION = glob ))
# define __ERRFUNC_P (*__errfunc) (const char *, int)
int glob (const char *__pattern, int __flags, int __ERRFUNC_P, glob_t *__data)
{ return __mingw_glob (__pattern, __flags, __errfunc, __data); }
# undef __ERRFUNC_P
__CRT_ALIAS __JMPSTUB__(( FUNCTION = globfree ))
void globfree (glob_t *__data){ return __mingw_globfree (__data); }
_END_C_DECLS
/* Manifest definitions for the possible status values
* which glob() may return.
*/
#define GLOB_SUCCESS (0)
#define GLOB_ABORTED (1)
#define GLOB_NOMATCH (2)
#define GLOB_NOSPACE (3)
#endif /* ! RC_INVOKED */
#endif /* !_GLOB_H: $RCSfile: glob.h,v $: end of file */