/ include / glob.h
glob.h
  1  /*
  2   * Copyright (c) 1989, 1993
  3   *	The Regents of the University of California.  All rights reserved.
  4   *
  5   * This code is derived from software contributed to Berkeley by
  6   * Guido van Rossum.
  7   *
  8   * Redistribution and use in source and binary forms, with or without
  9   * modification, are permitted provided that the following conditions
 10   * are met:
 11   * 1. Redistributions of source code must retain the above copyright
 12   *    notice, this list of conditions and the following disclaimer.
 13   * 2. Redistributions in binary form must reproduce the above copyright
 14   *    notice, this list of conditions and the following disclaimer in the
 15   *    documentation and/or other materials provided with the distribution.
 16   * 3. Neither the name of the University nor the names of its contributors
 17   *    may be used to endorse or promote products derived from this software
 18   *    without specific prior written permission.
 19   *
 20   * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 21   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 23   * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 24   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 25   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 26   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 27   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 28   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 29   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 30   * SUCH DAMAGE.
 31   *
 32   *	@(#)glob.h	8.1 (Berkeley) 6/2/93
 33   * $FreeBSD: /repoman/r/ncvs/src/include/glob.h,v 1.7 2002/07/17 04:58:09 mikeh Exp $
 34   */
 35  
 36  #ifndef _GLOB_H_
 37  #define	_GLOB_H_
 38  
 39  #include <_types.h>
 40  #include <sys/cdefs.h>
 41  #include <Availability.h>
 42  #include <sys/_types/_size_t.h>
 43  
 44  #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
 45  struct dirent;
 46  struct stat;
 47  #endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
 48  typedef struct {
 49  	size_t gl_pathc;	/* Count of total paths so far. */
 50  	int gl_matchc;		/* Count of paths matching pattern. */
 51  	size_t gl_offs;		/* Reserved at beginning of gl_pathv. */
 52  	int gl_flags;		/* Copy of flags parameter to glob. */
 53  	char **gl_pathv;	/* List of paths matching pattern. */
 54  				/* Copy of errfunc parameter to glob. */
 55  #ifdef __BLOCKS__
 56  	union {
 57  #endif /* __BLOCKS__ */
 58  		int (*gl_errfunc)(const char *, int);
 59  #ifdef __BLOCKS__
 60  		int (^gl_errblk)(const char *, int);
 61  	};
 62  #endif /* __BLOCKS__ */
 63  
 64  	/*
 65  	 * Alternate filesystem access methods for glob; replacement
 66  	 * versions of closedir(3), readdir(3), opendir(3), stat(2)
 67  	 * and lstat(2).
 68  	 */
 69  	void (*gl_closedir)(void *);
 70  #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
 71  	struct dirent *(*gl_readdir)(void *);
 72  #else /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
 73  	void *(*gl_readdir)(void *);
 74  #endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
 75  	void *(*gl_opendir)(const char *);
 76  #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
 77  	int (*gl_lstat)(const char *, struct stat *);
 78  	int (*gl_stat)(const char *, struct stat *);
 79  #else /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
 80  	int (*gl_lstat)(const char *, void *);
 81  	int (*gl_stat)(const char *, void *);
 82  #endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
 83  } glob_t;
 84  
 85  /* Believed to have been introduced in 1003.2-1992 */
 86  #define	GLOB_APPEND	0x0001	/* Append to output from previous call. */
 87  #define	GLOB_DOOFFS	0x0002	/* Use gl_offs. */
 88  #define	GLOB_ERR	0x0004	/* Return on error. */
 89  #define	GLOB_MARK	0x0008	/* Append / to matching directories. */
 90  #define	GLOB_NOCHECK	0x0010	/* Return pattern itself if nothing matches. */
 91  #define	GLOB_NOSORT	0x0020	/* Don't sort. */
 92  #define	GLOB_NOESCAPE	0x2000	/* Disable backslash escaping. */
 93  
 94  /* Error values returned by glob(3) */
 95  #define	GLOB_NOSPACE	(-1)	/* Malloc call failed. */
 96  #define	GLOB_ABORTED	(-2)	/* Unignored error. */
 97  #define	GLOB_NOMATCH	(-3)	/* No match and GLOB_NOCHECK was not set. */
 98  #define	GLOB_NOSYS	(-4)	/* Obsolete: source comptability only. */
 99  
100  #define	GLOB_ALTDIRFUNC	0x0040	/* Use alternately specified directory funcs. */
101  #define	GLOB_BRACE	0x0080	/* Expand braces ala csh. */
102  #define	GLOB_MAGCHAR	0x0100	/* Pattern had globbing characters. */
103  #define	GLOB_NOMAGIC	0x0200	/* GLOB_NOCHECK without magic chars (csh). */
104  #define	GLOB_QUOTE	0x0400	/* Quote special chars with \. */
105  #define	GLOB_TILDE	0x0800	/* Expand tilde names from the passwd file. */
106  #define	GLOB_LIMIT	0x1000	/* limit number of returned paths */
107  #ifdef __BLOCKS__
108  #define	_GLOB_ERR_BLOCK	0x80000000 /* (internal) error callback is a block */
109  #endif /* __BLOCKS__ */
110  
111  /* source compatibility, these are the old names */
112  #define GLOB_MAXPATH	GLOB_LIMIT
113  #define	GLOB_ABEND	GLOB_ABORTED
114  
115  __BEGIN_DECLS
116  int	glob(const char * __restrict, int, int (*)(const char *, int), 
117  	     glob_t * __restrict) __DARWIN_INODE64(glob);
118  #ifdef __BLOCKS__
119  #if __has_attribute(noescape)
120  #define __glob_noescape __attribute__((__noescape__))
121  #else
122  #define __glob_noescape
123  #endif
124  int	glob_b(const char * __restrict, int, int (^)(const char *, int) __glob_noescape,
125  	     glob_t * __restrict) __DARWIN_INODE64(glob_b) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2);
126  #endif /* __BLOCKS__ */
127  void	globfree(glob_t *);
128  __END_DECLS
129  
130  #endif /* !_GLOB_H_ */