1/* glob.h -- Find a path matching a pattern.
2
3   Copyright (C) 2005-2007, 2009-2022 Free Software Foundation, Inc.
4
5   Written by Derek Price <derek@ximbiot.com> & Paul Eggert <eggert@CS.UCLA.EDU>
6
7   This file is free software: you can redistribute it and/or modify
8   it under the terms of the GNU Lesser General Public License as
9   published by the Free Software Foundation; either version 2.1 of the
10   License, or (at your option) any later version.
11
12   This file is distributed in the hope that it will be useful,
13   but WITHOUT ANY WARRANTY; without even the implied warranty of
14   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   GNU Lesser General Public License for more details.
16
17   You should have received a copy of the GNU Lesser General Public License
18   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
19
20#ifndef _@GUARD_PREFIX@_GLOB_H
21
22#if __GNUC__ >= 3
23@PRAGMA_SYSTEM_HEADER@
24#endif
25@PRAGMA_COLUMNS@
26
27/* The include_next requires a split double-inclusion guard.  */
28#if @HAVE_GLOB_H@ && !@REPLACE_GLOB@
29# @INCLUDE_NEXT@ @NEXT_GLOB_H@
30#endif
31
32#ifndef _@GUARD_PREFIX@_GLOB_H
33#define _@GUARD_PREFIX@_GLOB_H
34
35/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
36
37/* The definition of _GL_ARG_NONNULL is copied here.  */
38
39/* The definition of _GL_WARN_ON_USE is copied here.  */
40
41/* For plain 'restrict', use glibc's __restrict if defined.
42   Otherwise, GCC 2.95 and later have "__restrict"; C99 compilers have
43   "restrict", and "configure" may have defined "restrict".
44   Other compilers use __restrict, __restrict__, and _Restrict, and
45   'configure' might #define 'restrict' to those words, so pick a
46   different name.  */
47#ifndef _Restrict_
48# if defined __restrict \
49     || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \
50     || __clang_major__ >= 3
51#  define _Restrict_ __restrict
52# elif 199901L <= __STDC_VERSION__ || defined restrict
53#  define _Restrict_ restrict
54# else
55#  define _Restrict_
56# endif
57#endif
58
59#ifdef __cplusplus
60extern "C" {
61#endif
62typedef int (*_gl_glob_errfunc_fn) (const char *, int);
63#ifdef __cplusplus
64}
65#endif
66
67
68#if !@HAVE_GLOB_H@ || @REPLACE_GLOB@
69
70
71/* Preparations for including the standard GNU C Library header.  */
72
73# include <stddef.h>
74
75/* On some systems, such as AIX 5.1, <sys/stat.h> does a "#define stat stat64".
76   Make sure this definition is seen before glob-libc.h defines types that
77   rely on 'struct stat'.  */
78# include <sys/stat.h>
79
80# if @REPLACE_GLOB@
81#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
82#   define glob rpl_glob
83#   define globfree rpl_globfree
84#  endif
85# endif
86# if @REPLACE_GLOB_PATTERN_P@
87#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
88#   define glob_pattern_p rpl_glob_pattern_p
89#  endif
90# endif
91# define __glob_pattern_p glob_pattern_p
92
93# define __GLOB_GNULIB 1
94
95
96/* Now the standard GNU C Library header should work.  */
97# include "glob-libc.gl.h"
98
99
100#endif
101
102
103#if @GNULIB_GLOB@
104# if @REPLACE_GLOB@
105_GL_FUNCDECL_RPL (glob, int, (const char *_Restrict_ __pattern, int __flags,
106                              _gl_glob_errfunc_fn __errfunc,
107                              glob_t *_Restrict_ __pglob)
108                              _GL_ARG_NONNULL ((1)));
109_GL_CXXALIAS_RPL (glob, int, (const char *_Restrict_ __pattern, int __flags,
110                              _gl_glob_errfunc_fn __errfunc,
111                              glob_t *_Restrict_ __pglob));
112# else
113#  if !@HAVE_GLOB@
114_GL_FUNCDECL_SYS (glob, int, (const char *_Restrict_ __pattern, int __flags,
115                              _gl_glob_errfunc_fn __errfunc,
116                              glob_t *_Restrict_ __pglob)
117                              _GL_ARG_NONNULL ((1)));
118#  endif
119_GL_CXXALIAS_SYS (glob, int, (const char *_Restrict_ __pattern, int __flags,
120                              _gl_glob_errfunc_fn __errfunc,
121                              glob_t *_Restrict_ __pglob));
122# endif
123_GL_CXXALIASWARN (glob);
124#elif defined GNULIB_POSIXCHECK
125# undef glob
126# if HAVE_RAW_DECL_GLOB
127_GL_WARN_ON_USE (glob,
128                 "glob is unportable - "
129                 "use gnulib module glob for portability");
130# endif
131#endif
132
133#if @GNULIB_GLOB@
134# if @REPLACE_GLOB@
135_GL_FUNCDECL_RPL (globfree, void, (glob_t *__pglob) _GL_ARG_NONNULL ((1)));
136_GL_CXXALIAS_RPL (globfree, void, (glob_t *__pglob));
137# else
138#  if !@HAVE_GLOB@
139_GL_FUNCDECL_SYS (globfree, void, (glob_t *__pglob) _GL_ARG_NONNULL ((1)));
140#  endif
141_GL_CXXALIAS_SYS (globfree, void, (glob_t *__pglob));
142# endif
143_GL_CXXALIASWARN (globfree);
144#elif defined GNULIB_POSIXCHECK
145# undef globfree
146# if HAVE_RAW_DECL_GLOBFREE
147_GL_WARN_ON_USE (globfree,
148                 "globfree is unportable - "
149                 "use gnulib module glob for portability");
150# endif
151#endif
152
153#if @GNULIB_GLOB@
154# if @REPLACE_GLOB_PATTERN_P@
155_GL_FUNCDECL_RPL (glob_pattern_p, int, (const char *__pattern, int __quote)
156                                       _GL_ARG_NONNULL ((1)));
157_GL_CXXALIAS_RPL (glob_pattern_p, int, (const char *__pattern, int __quote));
158# else
159#  if !@HAVE_GLOB_PATTERN_P@
160_GL_FUNCDECL_SYS (glob_pattern_p, int, (const char *__pattern, int __quote)
161                                       _GL_ARG_NONNULL ((1)));
162#  endif
163_GL_CXXALIAS_SYS (glob_pattern_p, int, (const char *__pattern, int __quote));
164# endif
165_GL_CXXALIASWARN (glob_pattern_p);
166#elif defined GNULIB_POSIXCHECK
167# undef glob_pattern_p
168# if HAVE_RAW_DECL_GLOB_PATTERN_P
169_GL_WARN_ON_USE (glob_pattern_p,
170                 "glob_pattern_p is unportable - "
171                 "use gnulib module glob for portability");
172# endif
173#endif
174
175
176#endif /* _@GUARD_PREFIX@_GLOB_H */
177#endif /* _@GUARD_PREFIX@_GLOB_H */
178