]> git.ipfire.org Git - thirdparty/glibc.git/blame - posix/glob.h
Update copyright notices with scripts/update-copyrights
[thirdparty/glibc.git] / posix / glob.h
CommitLineData
d4697bc9 1/* Copyright (C) 1991-2014 Free Software Foundation, Inc.
41bdb6e2 2 This file is part of the GNU C Library.
28f540f4 3
54d79e99 4 The GNU C Library is free software; you can redistribute it and/or
41bdb6e2
AJ
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.
54d79e99
UD
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
41bdb6e2 12 Lesser General Public License for more details.
54d79e99 13
41bdb6e2 14 You should have received a copy of the GNU Lesser General Public
59ba27a6
PE
15 License along with the GNU C Library; if not, see
16 <http://www.gnu.org/licenses/>. */
28f540f4
RM
17
18#ifndef _GLOB_H
28f540f4
RM
19#define _GLOB_H 1
20
5032f494 21#include <sys/cdefs.h>
28f540f4 22
5032f494 23__BEGIN_DECLS
28f540f4 24
052b6a6c
UD
25/* We need `size_t' for the following definitions. */
26#ifndef __size_t
052b6a6c 27typedef __SIZE_TYPE__ __size_t;
d48e5868 28# if defined __USE_XOPEN || __USE_XOPEN2K8
8ce9ea0c 29typedef __SIZE_TYPE__ size_t;
54b1f8b6 30# endif
052b6a6c
UD
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
28f540f4
RM
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. */
40a55d20 47
5032f494 48#if !defined __USE_POSIX2 || defined __USE_BSD || defined __USE_GNU
40a55d20
UD
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. */
1cab5444
UD
53# define GLOB_TILDE (1 << 12)/* Expand ~user and ~ to home directories. */
54# define GLOB_ONLYDIR (1 << 13)/* Match only directories. */
1bc21e7a
UD
55# define GLOB_TILDE_CHECK (1 << 14)/* Like GLOB_TILDE but return an error
56 if the user name is not available. */
40a55d20 57# define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \
787e4db9
RM
58 GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND| \
59 GLOB_PERIOD|GLOB_ALTDIRFUNC|GLOB_BRACE| \
1bc21e7a 60 GLOB_NOMAGIC|GLOB_TILDE|GLOB_ONLYDIR|GLOB_TILDE_CHECK)
40a55d20
UD
61#else
62# define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \
63 GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND| \
64 GLOB_PERIOD)
28f540f4
RM
65#endif
66
67/* Error returns from `glob'. */
68#define GLOB_NOSPACE 1 /* Ran out of memory. */
714a562f 69#define GLOB_ABORTED 2 /* Read error. */
28f540f4 70#define GLOB_NOMATCH 3 /* No matches found. */
a5f4e34a 71#define GLOB_NOSYS 4 /* Not implemented. */
5032f494 72#ifdef __USE_GNU
714a562f
UD
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
28f540f4 78/* Structure describing a globbing run. */
5032f494 79#ifdef __USE_GNU
787e4db9 80struct stat;
a13dab1c 81#endif
28f540f4
RM
82typedef struct
83 {
052b6a6c 84 __size_t gl_pathc; /* Count of paths matched by the pattern. */
28f540f4 85 char **gl_pathv; /* List of matched pathnames. */
052b6a6c 86 __size_t gl_offs; /* Slots to reserve in `gl_pathv'. */
28f540f4 87 int gl_flags; /* Set to FLAGS, maybe | GLOB_MAGCHAR. */
787e4db9
RM
88
89 /* If the GLOB_ALTDIRFUNC flag is set, the following functions
90 are used instead of the normal file access functions. */
79937577 91 void (*gl_closedir) (void *);
5032f494 92#ifdef __USE_GNU
79937577 93 struct dirent *(*gl_readdir) (void *);
97ac0eaf 94#else
79937577 95 void *(*gl_readdir) (void *);
97ac0eaf 96#endif
a784e502 97 void *(*gl_opendir) (const char *);
5032f494 98#ifdef __USE_GNU
a784e502
UD
99 int (*gl_lstat) (const char *__restrict, struct stat *__restrict);
100 int (*gl_stat) (const char *__restrict, struct stat *__restrict);
97ac0eaf 101#else
a784e502
UD
102 int (*gl_lstat) (const char *__restrict, void *__restrict);
103 int (*gl_stat) (const char *__restrict, void *__restrict);
97ac0eaf 104#endif
28f540f4
RM
105 } glob_t;
106
5032f494
UD
107#ifdef __USE_LARGEFILE64
108# ifdef __USE_GNU
a5f4e34a 109struct stat64;
97ac0eaf 110# endif
a5f4e34a
UD
111typedef struct
112 {
052b6a6c 113 __size_t gl_pathc;
a5f4e34a 114 char **gl_pathv;
052b6a6c 115 __size_t gl_offs;
a5f4e34a
UD
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. */
79937577 120 void (*gl_closedir) (void *);
5032f494 121# ifdef __USE_GNU
79937577 122 struct dirent64 *(*gl_readdir) (void *);
97ac0eaf 123# else
79937577 124 void *(*gl_readdir) (void *);
97ac0eaf 125# endif
a784e502 126 void *(*gl_opendir) (const char *);
5032f494 127# ifdef __USE_GNU
a784e502
UD
128 int (*gl_lstat) (const char *__restrict, struct stat64 *__restrict);
129 int (*gl_stat) (const char *__restrict, struct stat64 *__restrict);
97ac0eaf 130# else
a784e502
UD
131 int (*gl_lstat) (const char *__restrict, void *__restrict);
132 int (*gl_stat) (const char *__restrict, void *__restrict);
97ac0eaf 133# endif
a5f4e34a
UD
134 } glob64_t;
135#endif
136
28f540f4
RM
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. */
d48e5868 145#if !defined __USE_FILE_OFFSET64
a784e502
UD
146extern int glob (const char *__restrict __pattern, int __flags,
147 int (*__errfunc) (const char *, int),
79937577 148 glob_t *__restrict __pglob) __THROW;
28f540f4
RM
149
150/* Free storage allocated in PGLOB by a previous `glob' call. */
79937577 151extern void globfree (glob_t *__pglob) __THROW;
a5f4e34a 152#else
a784e502 153extern int __REDIRECT_NTH (glob, (const char *__restrict __pattern,
79937577 154 int __flags,
a784e502 155 int (*__errfunc) (const char *, int),
79937577 156 glob_t *__restrict __pglob), glob64);
a5f4e34a 157
79937577 158extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64);
a5f4e34a
UD
159#endif
160
5032f494 161#ifdef __USE_LARGEFILE64
a784e502
UD
162extern int glob64 (const char *__restrict __pattern, int __flags,
163 int (*__errfunc) (const char *, int),
79937577 164 glob64_t *__restrict __pglob) __THROW;
a5f4e34a 165
79937577 166extern void globfree64 (glob64_t *__pglob) __THROW;
a5f4e34a 167#endif
28f540f4
RM
168
169
5032f494 170#ifdef __USE_GNU
e7fd8a39
UD
171/* Return nonzero if PATTERN contains any metacharacters.
172 Metacharacters can be quoted with backslashes if QUOTE is nonzero.
173
174 This function is not part of the interface specified by POSIX.2
175 but several programs want to use it. */
a784e502 176extern int glob_pattern_p (const char *__pattern, int __quote) __THROW;
e7fd8a39
UD
177#endif
178
5032f494 179__END_DECLS
28f540f4
RM
180
181#endif /* glob.h */