1
/* A GNU-like <dirent.h>.
2
Copyright (C) 2006-2010 Free Software Foundation, Inc.
4
This program is free software: you can redistribute it and/or modify
5
it under the terms of the GNU General Public License as published by
6
the Free Software Foundation; either version 3 of the License, or
7
(at your option) any later version.
9
This program 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
12
GNU General Public License for more details.
14
You should have received a copy of the GNU General Public License
15
along with this program. If not, see <http://www.gnu.org/licenses/>. */
20
@PRAGMA_SYSTEM_HEADER@
23
/* The include_next requires a split double-inclusion guard. */
24
#@INCLUDE_NEXT@ @NEXT_DIRENT_H@
29
/* Get ino_t. Needed on some systems, including glibc 2.8. */
30
#include <sys/types.h>
32
/* The definition of GL_LINK_WARNING is copied here. */
34
/* The definition of _GL_ARG_NONNULL is copied here. */
41
/* Declare overridden functions. */
43
#if @REPLACE_CLOSEDIR@
44
# define closedir rpl_closedir
45
extern int closedir (DIR *) _GL_ARG_NONNULL ((1));
49
# if !@HAVE_DECL_DIRFD@ && !defined dirfd
50
/* Return the file descriptor associated with the given directory stream,
51
or -1 if none exists. */
52
extern int dirfd (DIR *dir) _GL_ARG_NONNULL ((1));
54
#elif defined GNULIB_POSIXCHECK
57
(GL_LINK_WARNING ("dirfd is unportable - " \
58
"use gnulib module dirfd for portability"), \
62
#if @GNULIB_FDOPENDIR@
63
# if @REPLACE_FDOPENDIR@
65
# define fdopendir rpl_fdopendir
67
# if !@HAVE_FDOPENDIR@ || @REPLACE_FDOPENDIR@
68
/* Open a directory stream visiting the given directory file
69
descriptor. Return NULL and set errno if fd is not visiting a
70
directory. On success, this function consumes fd (it will be
71
implicitly closed either by this function or by a subsequent
73
extern DIR *fdopendir (int fd);
75
#elif defined GNULIB_POSIXCHECK
77
# define fdopendir(f) \
78
(GL_LINK_WARNING ("fdopendir is unportable - " \
79
"use gnulib module fdopendir for portability"), \
84
# define opendir rpl_opendir
85
extern DIR * opendir (const char *) _GL_ARG_NONNULL ((1));
89
/* Scan the directory DIR, calling FILTER on each directory entry.
90
Entries for which FILTER returns nonzero are individually malloc'd,
91
sorted using qsort with CMP, and collected in a malloc'd array in
92
*NAMELIST. Returns the number of entries selected, or -1 on error. */
94
extern int scandir (const char *dir, struct dirent ***namelist,
95
int (*filter) (const struct dirent *),
96
int (*cmp) (const struct dirent **, const struct dirent **))
97
_GL_ARG_NONNULL ((1, 2, 4));
99
#elif defined GNULIB_POSIXCHECK
101
# define scandir(d,n,f,c) \
102
(GL_LINK_WARNING ("scandir is unportable - " \
103
"use gnulib module scandir for portability"), \
104
scandir (d, n, f, c))
107
#if @GNULIB_ALPHASORT@
108
/* Compare two 'struct dirent' entries alphabetically. */
109
# if !@HAVE_ALPHASORT@
110
extern int alphasort (const struct dirent **, const struct dirent **)
111
_GL_ARG_NONNULL ((1, 2));
113
#elif defined GNULIB_POSIXCHECK
115
# define alphasort(a,b) \
116
(GL_LINK_WARNING ("alphasort is unportable - " \
117
"use gnulib module alphasort for portability"), \
126
#endif /* _GL_DIRENT_H */
127
#endif /* _GL_DIRENT_H */