Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

167 lines (141 sloc) 7.162 kB
/* /////////////////////////////////////////////////////////////////////////////
* File: glob.h
*
* Purpose: Declaration of the glob() API functions and types for the
* Win32 platform.
*
* Created 13th November 2002
* Updated: 10th January 2005
*
* Home: http://synesis.com.au/software/
*
* Copyright 2002-2005, Matthew Wilson and Synesis Software
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* - Neither the names of Matthew Wilson and Synesis Software nor the names of
* any contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* ////////////////////////////////////////////////////////////////////////// */
/** \file glob.h
*
* Contains the declarations for the glob() API.
*/
#ifndef SYNSOFT_UNIXEM_INCL_H_GLOB
#define SYNSOFT_UNIXEM_INCL_H_GLOB
#ifndef _SYNSOFT_DOCUMENTATION_SKIP_SECTION
# define SYNSOFT_UNIXEM_VER_H_GLOB_MAJOR 2
# define SYNSOFT_UNIXEM_VER_H_GLOB_MINOR 0
# define SYNSOFT_UNIXEM_VER_H_GLOB_REVISION 2
# define SYNSOFT_UNIXEM_VER_H_GLOB_EDIT 21
#endif /* !_SYNSOFT_DOCUMENTATION_SKIP_SECTION */
/* ////////////////////////////////////////////////////////////////////////// */
/** \weakgroup unixem Synesis Software UNIX Emulation for Win32
* \brief The UNIX emulation library
*/
/** \weakgroup unixem_glob glob() API
* \ingroup UNIXem unixem
* \brief This API provides facilities for enumerating the file-system contents
* @{
*/
/* ////////////////////////////////////////////////////////////////////////// */
#ifndef _WIN32
# error This file is only currently defined for compilation on Win32 systems
#endif /* _WIN32 */
/* /////////////////////////////////////////////////////////////////////////////
* Constants and definitions
*/
/* Error codes */
#define GLOB_NOSPACE (1) /*!< \brief (Error result code:) An attempt to allocate memory failed, or if errno was 0 GLOB_LIMIT was specified in the flags and ARG_MAX patterns were matched. */
#define GLOB_ABORTED (2) /*!< \brief (Error result code:) The scan was stopped because an error was encountered and either GLOB_ERR was set or (*errfunc)() returned non-zero. */
#define GLOB_NOMATCH (3) /*!< \brief (Error result code:) The pattern does not match any existing pathname, and GLOB_NOCHECK was not set int flags. */
#define GLOB_NOSYS (4) /*!< \brief (Error result code:) . */
#define GLOB_ABEND GLOB_ABORTED /*!< \brief (Error result code:) . */
/* Flags */
#define GLOB_ERR 0x00000001 /*!< \brief Return on read errors. */
#define GLOB_MARK 0x00000002 /*!< \brief Append a slash to each name. */
#define GLOB_NOSORT 0x00000004 /*!< \brief Don't sort the names. */
#define GLOB_DOOFFS 0x00000008 /*!< \brief Insert PGLOB->gl_offs NULLs. */
#define GLOB_NOCHECK 0x00000010 /*!< \brief If nothing matches, return the pattern. */
#define GLOB_APPEND 0x00000020 /*!< \brief Append to results of a previous call. */
#define GLOB_NOESCAPE 0x00000040 /*!< \brief Backslashes don't quote metacharacters. */
#define GLOB_PERIOD 0x00000080 /*!< \brief Leading `.' can be matched by metachars. */
# define GLOB_MAGCHAR 0x00000100 /*!< \brief Set in gl_flags if any metachars seen. */
# define GLOB_ALTDIRFUNC 0x00000200 /*!< \brief Use gl_opendir et al functions. */
# define GLOB_BRACE 0x00000400 /*!< \brief Expand "{a,b}" to "a" "b". */
# define GLOB_NOMAGIC 0x00000800 /*!< \brief If no magic chars, return the pattern. */
# define GLOB_TILDE 0x00001000 /*!< \brief Expand ~user and ~ to home directories. */
# define GLOB_ONLYDIR 0x00002000 /*!< \brief Match only directories. */
# define GLOB_TILDE_CHECK 0x00004000 /*!< \brief Like GLOB_TILDE but return an error */
/* /////////////////////////////////////////////////////////////////////////////
* Typedefs
*/
/** \brief Result structure for glob()
*
* This structure is used by glob() to return the results of the search.
*/
typedef struct
{
int gl_pathc; /*!< count of total paths so far */
int gl_matchc; /*!< count of paths matching pattern */
int gl_offs; /*!< reserved at beginning of gl_pathv */
int gl_flags; /*!< returned flags */
char **gl_pathv; /*!< list of paths matching pattern */
} glob_t;
/* /////////////////////////////////////////////////////////////////////////////
* API functions
*/
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** \brief Generates pathnames matching a pattern
*
* This function is a pathname generator that implements the rules for
* file name pattern matching used by the UNIX shell.
*
* \param pattern The pattern controlling the search
* \param flags A combination of the <b>GLOB_*</b> flags
* \param errfunc [Not currently supported. Must be NULL]
* \param pglob Pointer to a glob_t structure to receive the search results
* \return 0 on success, otherwise one of the <b>GLOB_*</b> error codes
*/
int glob( char const *pattern
, int flags
, int (*errfunc)(char const *, int)
, glob_t *pglob);
/** \brief Frees the results of a call to glob
*
* This function releases any memory allocated in a call to glob. It must
* always be called for a successful call to glob.
*
* \param pglob Pointer to a glob_t structure to receive the search results
*/
void globfree(glob_t *pglob);
#ifdef __cplusplus
}
#endif /* __cplusplus */
/* ////////////////////////////////////////////////////////////////////////// */
/** @} // end of group unixem_glob */
/* ////////////////////////////////////////////////////////////////////////// */
#endif /* SYNSOFT_UNIXEM_INCL_H_GLOB */
/* ////////////////////////////////////////////////////////////////////////// */
Jump to Line
Something went wrong with that request. Please try again.