1*53ee8cc1Swenshuai.xi /* Copyright (C) 1991,92,95-98,2000,2001,2004 Free Software Foundation, Inc. 2*53ee8cc1Swenshuai.xi This file is part of the GNU C Library. 3*53ee8cc1Swenshuai.xi 4*53ee8cc1Swenshuai.xi The GNU C Library is free software; you can redistribute it and/or 5*53ee8cc1Swenshuai.xi modify it under the terms of the GNU Lesser General Public 6*53ee8cc1Swenshuai.xi License as published by the Free Software Foundation; either 7*53ee8cc1Swenshuai.xi version 2.1 of the License, or (at your option) any later version. 8*53ee8cc1Swenshuai.xi 9*53ee8cc1Swenshuai.xi The GNU C Library is distributed in the hope that it will be useful, 10*53ee8cc1Swenshuai.xi but WITHOUT ANY WARRANTY; without even the implied warranty of 11*53ee8cc1Swenshuai.xi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12*53ee8cc1Swenshuai.xi Lesser General Public License for more details. 13*53ee8cc1Swenshuai.xi 14*53ee8cc1Swenshuai.xi You should have received a copy of the GNU Lesser General Public 15*53ee8cc1Swenshuai.xi License along with the GNU C Library; if not, write to the Free 16*53ee8cc1Swenshuai.xi Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 17*53ee8cc1Swenshuai.xi 02111-1307 USA. */ 18*53ee8cc1Swenshuai.xi 19*53ee8cc1Swenshuai.xi #ifndef _GLOB_H 20*53ee8cc1Swenshuai.xi #define _GLOB_H 1 21*53ee8cc1Swenshuai.xi 22*53ee8cc1Swenshuai.xi #include <sys/cdefs.h> 23*53ee8cc1Swenshuai.xi 24*53ee8cc1Swenshuai.xi __BEGIN_DECLS 25*53ee8cc1Swenshuai.xi 26*53ee8cc1Swenshuai.xi /* We need `size_t' for the following definitions. */ 27*53ee8cc1Swenshuai.xi #ifndef __size_t 28*53ee8cc1Swenshuai.xi # if defined __GNUC__ && __GNUC__ >= 2 29*53ee8cc1Swenshuai.xi typedef __SIZE_TYPE__ __size_t; 30*53ee8cc1Swenshuai.xi # ifdef __USE_XOPEN 31*53ee8cc1Swenshuai.xi typedef __SIZE_TYPE__ size_t; 32*53ee8cc1Swenshuai.xi # endif 33*53ee8cc1Swenshuai.xi # else 34*53ee8cc1Swenshuai.xi # include <stddef.h> 35*53ee8cc1Swenshuai.xi # ifndef __size_t 36*53ee8cc1Swenshuai.xi # define __size_t size_t 37*53ee8cc1Swenshuai.xi # endif 38*53ee8cc1Swenshuai.xi # endif 39*53ee8cc1Swenshuai.xi #else 40*53ee8cc1Swenshuai.xi /* The GNU CC stddef.h version defines __size_t as empty. We need a real 41*53ee8cc1Swenshuai.xi definition. */ 42*53ee8cc1Swenshuai.xi # undef __size_t 43*53ee8cc1Swenshuai.xi # define __size_t size_t 44*53ee8cc1Swenshuai.xi #endif 45*53ee8cc1Swenshuai.xi 46*53ee8cc1Swenshuai.xi /* Bits set in the FLAGS argument to `glob'. */ 47*53ee8cc1Swenshuai.xi #define GLOB_ERR (1 << 0)/* Return on read errors. */ 48*53ee8cc1Swenshuai.xi #define GLOB_MARK (1 << 1)/* Append a slash to each name. */ 49*53ee8cc1Swenshuai.xi #define GLOB_NOSORT (1 << 2)/* Don't sort the names. */ 50*53ee8cc1Swenshuai.xi #define GLOB_DOOFFS (1 << 3)/* Insert PGLOB->gl_offs NULLs. */ 51*53ee8cc1Swenshuai.xi #define GLOB_NOCHECK (1 << 4)/* If nothing matches, return the pattern. */ 52*53ee8cc1Swenshuai.xi #define GLOB_APPEND (1 << 5)/* Append to results of a previous call. */ 53*53ee8cc1Swenshuai.xi #define GLOB_NOESCAPE (1 << 6)/* Backslashes don't quote metacharacters. */ 54*53ee8cc1Swenshuai.xi #define GLOB_PERIOD (1 << 7)/* Leading `.' can be matched by metachars. */ 55*53ee8cc1Swenshuai.xi 56*53ee8cc1Swenshuai.xi #if !defined __USE_POSIX2 || defined __USE_BSD || defined __USE_GNU 57*53ee8cc1Swenshuai.xi # define GLOB_MAGCHAR (1 << 8)/* Set in gl_flags if any metachars seen. */ 58*53ee8cc1Swenshuai.xi # define GLOB_ALTDIRFUNC (1 << 9)/* Use gl_opendir et al functions. */ 59*53ee8cc1Swenshuai.xi # define GLOB_BRACE (1 << 10)/* Expand "{a,b}" to "a" "b". */ 60*53ee8cc1Swenshuai.xi # define GLOB_NOMAGIC (1 << 11)/* If no magic chars, return the pattern. */ 61*53ee8cc1Swenshuai.xi # define GLOB_TILDE (1 << 12)/* Expand ~user and ~ to home directories. */ 62*53ee8cc1Swenshuai.xi # define GLOB_ONLYDIR (1 << 13)/* Match only directories. */ 63*53ee8cc1Swenshuai.xi # define GLOB_TILDE_CHECK (1 << 14)/* Like GLOB_TILDE but return an error 64*53ee8cc1Swenshuai.xi if the user name is not available. */ 65*53ee8cc1Swenshuai.xi # define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \ 66*53ee8cc1Swenshuai.xi GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND| \ 67*53ee8cc1Swenshuai.xi GLOB_PERIOD|GLOB_ALTDIRFUNC|GLOB_BRACE| \ 68*53ee8cc1Swenshuai.xi GLOB_NOMAGIC|GLOB_TILDE|GLOB_ONLYDIR|GLOB_TILDE_CHECK) 69*53ee8cc1Swenshuai.xi #else 70*53ee8cc1Swenshuai.xi # define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \ 71*53ee8cc1Swenshuai.xi GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND| \ 72*53ee8cc1Swenshuai.xi GLOB_PERIOD) 73*53ee8cc1Swenshuai.xi #endif 74*53ee8cc1Swenshuai.xi 75*53ee8cc1Swenshuai.xi /* Error returns from `glob'. */ 76*53ee8cc1Swenshuai.xi #define GLOB_NOSPACE 1 /* Ran out of memory. */ 77*53ee8cc1Swenshuai.xi #define GLOB_ABORTED 2 /* Read error. */ 78*53ee8cc1Swenshuai.xi #define GLOB_NOMATCH 3 /* No matches found. */ 79*53ee8cc1Swenshuai.xi #define GLOB_NOSYS 4 /* Not implemented. */ 80*53ee8cc1Swenshuai.xi #ifdef __USE_GNU 81*53ee8cc1Swenshuai.xi /* Previous versions of this file defined GLOB_ABEND instead of 82*53ee8cc1Swenshuai.xi GLOB_ABORTED. Provide a compatibility definition here. */ 83*53ee8cc1Swenshuai.xi # define GLOB_ABEND GLOB_ABORTED 84*53ee8cc1Swenshuai.xi #endif 85*53ee8cc1Swenshuai.xi 86*53ee8cc1Swenshuai.xi /* Structure describing a globbing run. */ 87*53ee8cc1Swenshuai.xi #ifdef __USE_GNU 88*53ee8cc1Swenshuai.xi struct stat; 89*53ee8cc1Swenshuai.xi #endif 90*53ee8cc1Swenshuai.xi typedef struct 91*53ee8cc1Swenshuai.xi { 92*53ee8cc1Swenshuai.xi __size_t gl_pathc; /* Count of paths matched by the pattern. */ 93*53ee8cc1Swenshuai.xi char **gl_pathv; /* List of matched pathnames. */ 94*53ee8cc1Swenshuai.xi __size_t gl_offs; /* Slots to reserve in `gl_pathv'. */ 95*53ee8cc1Swenshuai.xi int gl_flags; /* Set to FLAGS, maybe | GLOB_MAGCHAR. */ 96*53ee8cc1Swenshuai.xi 97*53ee8cc1Swenshuai.xi /* If the GLOB_ALTDIRFUNC flag is set, the following functions 98*53ee8cc1Swenshuai.xi are used instead of the normal file access functions. */ 99*53ee8cc1Swenshuai.xi void (*gl_closedir) (void *); 100*53ee8cc1Swenshuai.xi #ifdef __USE_GNU 101*53ee8cc1Swenshuai.xi struct dirent *(*gl_readdir) (void *); 102*53ee8cc1Swenshuai.xi #else 103*53ee8cc1Swenshuai.xi void *(*gl_readdir) (void *); 104*53ee8cc1Swenshuai.xi #endif 105*53ee8cc1Swenshuai.xi void *(*gl_opendir) (__const char *); 106*53ee8cc1Swenshuai.xi #ifdef __USE_GNU 107*53ee8cc1Swenshuai.xi int (*gl_lstat) (__const char *__restrict, struct stat *__restrict); 108*53ee8cc1Swenshuai.xi int (*gl_stat) (__const char *__restrict, struct stat *__restrict); 109*53ee8cc1Swenshuai.xi #else 110*53ee8cc1Swenshuai.xi int (*gl_lstat) (__const char *__restrict, void *__restrict); 111*53ee8cc1Swenshuai.xi int (*gl_stat) (__const char *__restrict, void *__restrict); 112*53ee8cc1Swenshuai.xi #endif 113*53ee8cc1Swenshuai.xi } glob_t; 114*53ee8cc1Swenshuai.xi 115*53ee8cc1Swenshuai.xi #ifdef __USE_LARGEFILE64 116*53ee8cc1Swenshuai.xi # ifdef __USE_GNU 117*53ee8cc1Swenshuai.xi struct stat64; 118*53ee8cc1Swenshuai.xi # endif 119*53ee8cc1Swenshuai.xi typedef struct 120*53ee8cc1Swenshuai.xi { 121*53ee8cc1Swenshuai.xi __size_t gl_pathc; 122*53ee8cc1Swenshuai.xi char **gl_pathv; 123*53ee8cc1Swenshuai.xi __size_t gl_offs; 124*53ee8cc1Swenshuai.xi int gl_flags; 125*53ee8cc1Swenshuai.xi 126*53ee8cc1Swenshuai.xi /* If the GLOB_ALTDIRFUNC flag is set, the following functions 127*53ee8cc1Swenshuai.xi are used instead of the normal file access functions. */ 128*53ee8cc1Swenshuai.xi void (*gl_closedir) (void *); 129*53ee8cc1Swenshuai.xi # ifdef __USE_GNU 130*53ee8cc1Swenshuai.xi struct dirent64 *(*gl_readdir) (void *); 131*53ee8cc1Swenshuai.xi # else 132*53ee8cc1Swenshuai.xi void *(*gl_readdir) (void *); 133*53ee8cc1Swenshuai.xi # endif 134*53ee8cc1Swenshuai.xi void *(*gl_opendir) (__const char *); 135*53ee8cc1Swenshuai.xi # ifdef __USE_GNU 136*53ee8cc1Swenshuai.xi int (*gl_lstat) (__const char *__restrict, struct stat64 *__restrict); 137*53ee8cc1Swenshuai.xi int (*gl_stat) (__const char *__restrict, struct stat64 *__restrict); 138*53ee8cc1Swenshuai.xi # else 139*53ee8cc1Swenshuai.xi int (*gl_lstat) (__const char *__restrict, void *__restrict); 140*53ee8cc1Swenshuai.xi int (*gl_stat) (__const char *__restrict, void *__restrict); 141*53ee8cc1Swenshuai.xi # endif 142*53ee8cc1Swenshuai.xi } glob64_t; 143*53ee8cc1Swenshuai.xi #endif 144*53ee8cc1Swenshuai.xi 145*53ee8cc1Swenshuai.xi #if __USE_FILE_OFFSET64 && __GNUC__ < 2 146*53ee8cc1Swenshuai.xi # define glob glob64 147*53ee8cc1Swenshuai.xi # define globfree globfree64 148*53ee8cc1Swenshuai.xi #endif 149*53ee8cc1Swenshuai.xi 150*53ee8cc1Swenshuai.xi /* Do glob searching for PATTERN, placing results in PGLOB. 151*53ee8cc1Swenshuai.xi The bits defined above may be set in FLAGS. 152*53ee8cc1Swenshuai.xi If a directory cannot be opened or read and ERRFUNC is not nil, 153*53ee8cc1Swenshuai.xi it is called with the pathname that caused the error, and the 154*53ee8cc1Swenshuai.xi `errno' value from the failing call; if it returns non-zero 155*53ee8cc1Swenshuai.xi `glob' returns GLOB_ABEND; if it returns zero, the error is ignored. 156*53ee8cc1Swenshuai.xi If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned. 157*53ee8cc1Swenshuai.xi Otherwise, `glob' returns zero. */ 158*53ee8cc1Swenshuai.xi #if !defined __USE_FILE_OFFSET64 || __GNUC__ < 2 159*53ee8cc1Swenshuai.xi extern int glob (__const char *__restrict __pattern, int __flags, 160*53ee8cc1Swenshuai.xi int (*__errfunc) (__const char *, int), 161*53ee8cc1Swenshuai.xi glob_t *__restrict __pglob) __THROW; 162*53ee8cc1Swenshuai.xi 163*53ee8cc1Swenshuai.xi /* Free storage allocated in PGLOB by a previous `glob' call. */ 164*53ee8cc1Swenshuai.xi extern void globfree (glob_t *__pglob) __THROW; 165*53ee8cc1Swenshuai.xi #else 166*53ee8cc1Swenshuai.xi extern int __REDIRECT_NTH (glob, (__const char *__restrict __pattern, 167*53ee8cc1Swenshuai.xi int __flags, 168*53ee8cc1Swenshuai.xi int (*__errfunc) (__const char *, int), 169*53ee8cc1Swenshuai.xi glob_t *__restrict __pglob), glob64); 170*53ee8cc1Swenshuai.xi 171*53ee8cc1Swenshuai.xi extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64); 172*53ee8cc1Swenshuai.xi #endif 173*53ee8cc1Swenshuai.xi 174*53ee8cc1Swenshuai.xi #ifdef __USE_LARGEFILE64 175*53ee8cc1Swenshuai.xi extern int glob64 (__const char *__restrict __pattern, int __flags, 176*53ee8cc1Swenshuai.xi int (*__errfunc) (__const char *, int), 177*53ee8cc1Swenshuai.xi glob64_t *__restrict __pglob) __THROW; 178*53ee8cc1Swenshuai.xi 179*53ee8cc1Swenshuai.xi extern void globfree64 (glob64_t *__pglob) __THROW; 180*53ee8cc1Swenshuai.xi #endif 181*53ee8cc1Swenshuai.xi 182*53ee8cc1Swenshuai.xi 183*53ee8cc1Swenshuai.xi #ifdef __USE_GNU 184*53ee8cc1Swenshuai.xi /* Return nonzero if PATTERN contains any metacharacters. 185*53ee8cc1Swenshuai.xi Metacharacters can be quoted with backslashes if QUOTE is nonzero. 186*53ee8cc1Swenshuai.xi 187*53ee8cc1Swenshuai.xi This function is not part of the interface specified by POSIX.2 188*53ee8cc1Swenshuai.xi but several programs want to use it. */ 189*53ee8cc1Swenshuai.xi extern int glob_pattern_p (__const char *__pattern, int __quote) __THROW; 190*53ee8cc1Swenshuai.xi #endif 191*53ee8cc1Swenshuai.xi 192*53ee8cc1Swenshuai.xi __END_DECLS 193*53ee8cc1Swenshuai.xi 194*53ee8cc1Swenshuai.xi #endif /* glob.h */ 195