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