master
  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 <_bounds.h>
 42#include <Availability.h>
 43#include <sys/_types/_size_t.h>
 44
 45_LIBC_SINGLE_BY_DEFAULT()
 46
 47#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
 48struct dirent;
 49struct stat;
 50#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
 51typedef struct {
 52	size_t gl_pathc;	/* Count of total paths so far. */
 53	int gl_matchc;		/* Count of paths matching pattern. */
 54	size_t gl_offs;		/* Reserved at beginning of gl_pathv. */
 55	int gl_flags;		/* Copy of flags parameter to glob. */
 56	char *_LIBC_CSTR *_LIBC_COUNT(gl_matchc)	gl_pathv; /* List of paths matching pattern. */
 57				/* Copy of errfunc parameter to glob. */
 58#ifdef __BLOCKS__
 59	union {
 60#endif /* __BLOCKS__ */
 61		int (*gl_errfunc)(const char *, int);
 62#ifdef __BLOCKS__
 63		int (^gl_errblk)(const char *, int);
 64	};
 65#endif /* __BLOCKS__ */
 66
 67	/*
 68	 * Alternate filesystem access methods for glob; replacement
 69	 * versions of closedir(3), readdir(3), opendir(3), stat(2)
 70	 * and lstat(2).
 71	 */
 72	void (*gl_closedir)(void *);
 73#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
 74	struct dirent *(*gl_readdir)(void *);
 75#else /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
 76	void *(*gl_readdir)(void *);
 77#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
 78	void *(*gl_opendir)(const char *);
 79#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
 80	int (*gl_lstat)(const char *, struct stat *);
 81	int (*gl_stat)(const char *, struct stat *);
 82#else /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
 83	int (*gl_lstat)(const char *, void *);
 84	int (*gl_stat)(const char *, void *);
 85#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
 86} glob_t;
 87
 88/* Believed to have been introduced in 1003.2-1992 */
 89#define	GLOB_APPEND	0x0001	/* Append to output from previous call. */
 90#define	GLOB_DOOFFS	0x0002	/* Use gl_offs. */
 91#define	GLOB_ERR	0x0004	/* Return on error. */
 92#define	GLOB_MARK	0x0008	/* Append / to matching directories. */
 93#define	GLOB_NOCHECK	0x0010	/* Return pattern itself if nothing matches. */
 94#define	GLOB_NOSORT	0x0020	/* Don't sort. */
 95#define	GLOB_NOESCAPE	0x2000	/* Disable backslash escaping. */
 96
 97/* Error values returned by glob(3) */
 98#define	GLOB_NOSPACE	(-1)	/* Malloc call failed. */
 99#define	GLOB_ABORTED	(-2)	/* Unignored error. */
100#define	GLOB_NOMATCH	(-3)	/* No match and GLOB_NOCHECK was not set. */
101#define	GLOB_NOSYS	(-4)	/* Obsolete: source comptability only. */
102
103#define	GLOB_ALTDIRFUNC	0x0040	/* Use alternately specified directory funcs. */
104#define	GLOB_BRACE	0x0080	/* Expand braces ala csh. */
105#define	GLOB_MAGCHAR	0x0100	/* Pattern had globbing characters. */
106#define	GLOB_NOMAGIC	0x0200	/* GLOB_NOCHECK without magic chars (csh). */
107#define	GLOB_QUOTE	0x0400	/* Quote special chars with \. */
108#define	GLOB_TILDE	0x0800	/* Expand tilde names from the passwd file. */
109#define	GLOB_LIMIT	0x1000	/* limit number of returned paths */
110#ifdef __BLOCKS__
111#define	_GLOB_ERR_BLOCK	0x80000000 /* (internal) error callback is a block */
112#endif /* __BLOCKS__ */
113
114/* source compatibility, these are the old names */
115#define GLOB_MAXPATH	GLOB_LIMIT
116#define	GLOB_ABEND	GLOB_ABORTED
117
118__BEGIN_DECLS
119int	glob(const char * __restrict, int, int (*)(const char *, int), 
120	     glob_t * __restrict) __DARWIN_INODE64(glob);
121#ifdef __BLOCKS__
122#if __has_attribute(noescape)
123#define __glob_noescape __attribute__((__noescape__))
124#else
125#define __glob_noescape
126#endif
127int	glob_b(const char * __restrict, int, int (^)(const char *, int) __glob_noescape,
128	     glob_t * __restrict) __DARWIN_INODE64(glob_b) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2);
129#endif /* __BLOCKS__ */
130void	globfree(glob_t *);
131__END_DECLS
132
133#endif /* !_GLOB_H_ */