xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/dirent.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi /* Copyright (C) 1991-2000, 2003, 2004, 2005 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 /*
20*53ee8cc1Swenshuai.xi  *	POSIX Standard: 5.1.2 Directory Operations	<dirent.h>
21*53ee8cc1Swenshuai.xi  */
22*53ee8cc1Swenshuai.xi 
23*53ee8cc1Swenshuai.xi #ifndef	_DIRENT_H
24*53ee8cc1Swenshuai.xi #define	_DIRENT_H	1
25*53ee8cc1Swenshuai.xi 
26*53ee8cc1Swenshuai.xi #include <features.h>
27*53ee8cc1Swenshuai.xi 
28*53ee8cc1Swenshuai.xi __BEGIN_DECLS
29*53ee8cc1Swenshuai.xi 
30*53ee8cc1Swenshuai.xi #include <bits/types.h>
31*53ee8cc1Swenshuai.xi 
32*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN
33*53ee8cc1Swenshuai.xi # ifndef __ino_t_defined
34*53ee8cc1Swenshuai.xi #  ifndef __USE_FILE_OFFSET64
35*53ee8cc1Swenshuai.xi typedef __ino_t ino_t;
36*53ee8cc1Swenshuai.xi #  else
37*53ee8cc1Swenshuai.xi typedef __ino64_t ino_t;
38*53ee8cc1Swenshuai.xi #  endif
39*53ee8cc1Swenshuai.xi #  define __ino_t_defined
40*53ee8cc1Swenshuai.xi # endif
41*53ee8cc1Swenshuai.xi # if defined __USE_LARGEFILE64 && !defined __ino64_t_defined
42*53ee8cc1Swenshuai.xi typedef __ino64_t ino64_t;
43*53ee8cc1Swenshuai.xi #  define __ino64_t_defined
44*53ee8cc1Swenshuai.xi # endif
45*53ee8cc1Swenshuai.xi #endif
46*53ee8cc1Swenshuai.xi 
47*53ee8cc1Swenshuai.xi /* This file defines `struct dirent'.
48*53ee8cc1Swenshuai.xi 
49*53ee8cc1Swenshuai.xi    It defines the macro `_DIRENT_HAVE_D_NAMLEN' iff there is a `d_namlen'
50*53ee8cc1Swenshuai.xi    member that gives the length of `d_name'.
51*53ee8cc1Swenshuai.xi 
52*53ee8cc1Swenshuai.xi    It defines the macro `_DIRENT_HAVE_D_RECLEN' iff there is a `d_reclen'
53*53ee8cc1Swenshuai.xi    member that gives the size of the entire directory entry.
54*53ee8cc1Swenshuai.xi 
55*53ee8cc1Swenshuai.xi    It defines the macro `_DIRENT_HAVE_D_OFF' iff there is a `d_off'
56*53ee8cc1Swenshuai.xi    member that gives the file offset of the next directory entry.
57*53ee8cc1Swenshuai.xi 
58*53ee8cc1Swenshuai.xi    It defines the macro `_DIRENT_HAVE_D_TYPE' iff there is a `d_type'
59*53ee8cc1Swenshuai.xi    member that gives the type of the file.
60*53ee8cc1Swenshuai.xi  */
61*53ee8cc1Swenshuai.xi 
62*53ee8cc1Swenshuai.xi #include <bits/dirent.h>
63*53ee8cc1Swenshuai.xi 
64*53ee8cc1Swenshuai.xi #if (defined __USE_BSD || defined __USE_MISC) && !defined d_fileno
65*53ee8cc1Swenshuai.xi # define d_ino	d_fileno		 /* Backward compatibility.  */
66*53ee8cc1Swenshuai.xi #endif
67*53ee8cc1Swenshuai.xi 
68*53ee8cc1Swenshuai.xi /* These macros extract size information from a `struct dirent *'.
69*53ee8cc1Swenshuai.xi    They may evaluate their argument multiple times, so it must not
70*53ee8cc1Swenshuai.xi    have side effects.  Each of these may involve a relatively costly
71*53ee8cc1Swenshuai.xi    call to `strlen' on some systems, so these values should be cached.
72*53ee8cc1Swenshuai.xi 
73*53ee8cc1Swenshuai.xi    _D_EXACT_NAMLEN (DP)	returns the length of DP->d_name, not including
74*53ee8cc1Swenshuai.xi    its terminating null character.
75*53ee8cc1Swenshuai.xi 
76*53ee8cc1Swenshuai.xi    _D_ALLOC_NAMLEN (DP)	returns a size at least (_D_EXACT_NAMLEN (DP) + 1);
77*53ee8cc1Swenshuai.xi    that is, the allocation size needed to hold the DP->d_name string.
78*53ee8cc1Swenshuai.xi    Use this macro when you don't need the exact length, just an upper bound.
79*53ee8cc1Swenshuai.xi    This macro is less likely to require calling `strlen' than _D_EXACT_NAMLEN.
80*53ee8cc1Swenshuai.xi    */
81*53ee8cc1Swenshuai.xi 
82*53ee8cc1Swenshuai.xi #ifdef _DIRENT_HAVE_D_NAMLEN
83*53ee8cc1Swenshuai.xi # define _D_EXACT_NAMLEN(d) ((d)->d_namlen)
84*53ee8cc1Swenshuai.xi # define _D_ALLOC_NAMLEN(d) (_D_EXACT_NAMLEN (d) + 1)
85*53ee8cc1Swenshuai.xi #else
86*53ee8cc1Swenshuai.xi # define _D_EXACT_NAMLEN(d) (strlen ((d)->d_name))
87*53ee8cc1Swenshuai.xi # ifdef _DIRENT_HAVE_D_RECLEN
88*53ee8cc1Swenshuai.xi #  define _D_ALLOC_NAMLEN(d) (((char *) (d) + (d)->d_reclen) - &(d)->d_name[0])
89*53ee8cc1Swenshuai.xi # else
90*53ee8cc1Swenshuai.xi #  define _D_ALLOC_NAMLEN(d) (sizeof (d)->d_name > 1 ? sizeof (d)->d_name : \
91*53ee8cc1Swenshuai.xi 			      _D_EXACT_NAMLEN (d) + 1)
92*53ee8cc1Swenshuai.xi # endif
93*53ee8cc1Swenshuai.xi #endif
94*53ee8cc1Swenshuai.xi 
95*53ee8cc1Swenshuai.xi 
96*53ee8cc1Swenshuai.xi #ifdef __USE_BSD
97*53ee8cc1Swenshuai.xi /* File types for `d_type'.  */
98*53ee8cc1Swenshuai.xi enum
99*53ee8cc1Swenshuai.xi   {
100*53ee8cc1Swenshuai.xi     DT_UNKNOWN = 0,
101*53ee8cc1Swenshuai.xi # define DT_UNKNOWN	DT_UNKNOWN
102*53ee8cc1Swenshuai.xi     DT_FIFO = 1,
103*53ee8cc1Swenshuai.xi # define DT_FIFO	DT_FIFO
104*53ee8cc1Swenshuai.xi     DT_CHR = 2,
105*53ee8cc1Swenshuai.xi # define DT_CHR		DT_CHR
106*53ee8cc1Swenshuai.xi     DT_DIR = 4,
107*53ee8cc1Swenshuai.xi # define DT_DIR		DT_DIR
108*53ee8cc1Swenshuai.xi     DT_BLK = 6,
109*53ee8cc1Swenshuai.xi # define DT_BLK		DT_BLK
110*53ee8cc1Swenshuai.xi     DT_REG = 8,
111*53ee8cc1Swenshuai.xi # define DT_REG		DT_REG
112*53ee8cc1Swenshuai.xi     DT_LNK = 10,
113*53ee8cc1Swenshuai.xi # define DT_LNK		DT_LNK
114*53ee8cc1Swenshuai.xi     DT_SOCK = 12,
115*53ee8cc1Swenshuai.xi # define DT_SOCK	DT_SOCK
116*53ee8cc1Swenshuai.xi     DT_WHT = 14
117*53ee8cc1Swenshuai.xi # define DT_WHT		DT_WHT
118*53ee8cc1Swenshuai.xi   };
119*53ee8cc1Swenshuai.xi 
120*53ee8cc1Swenshuai.xi /* Convert between stat structure types and directory types.  */
121*53ee8cc1Swenshuai.xi # define IFTODT(mode)	(((mode) & 0170000) >> 12)
122*53ee8cc1Swenshuai.xi # define DTTOIF(dirtype)	((dirtype) << 12)
123*53ee8cc1Swenshuai.xi #endif
124*53ee8cc1Swenshuai.xi 
125*53ee8cc1Swenshuai.xi 
126*53ee8cc1Swenshuai.xi /* This is the data type of directory stream objects.
127*53ee8cc1Swenshuai.xi    The actual structure is opaque to users.  */
128*53ee8cc1Swenshuai.xi typedef struct __dirstream DIR;
129*53ee8cc1Swenshuai.xi 
130*53ee8cc1Swenshuai.xi /* Open a directory stream on NAME.
131*53ee8cc1Swenshuai.xi    Return a DIR stream on the directory, or NULL if it could not be opened.
132*53ee8cc1Swenshuai.xi 
133*53ee8cc1Swenshuai.xi    This function is a possible cancellation point and therefore not
134*53ee8cc1Swenshuai.xi    marked with __THROW.  */
135*53ee8cc1Swenshuai.xi extern DIR *opendir (__const char *__name) __nonnull ((1));
136*53ee8cc1Swenshuai.xi 
137*53ee8cc1Swenshuai.xi #ifdef __USE_GNU
138*53ee8cc1Swenshuai.xi /* Same as opendir, but open the stream on the file descriptor FD.
139*53ee8cc1Swenshuai.xi 
140*53ee8cc1Swenshuai.xi    This function is a possible cancellation point and therefore not
141*53ee8cc1Swenshuai.xi    marked with __THROW.  */
142*53ee8cc1Swenshuai.xi extern DIR *fdopendir (int __fd);
143*53ee8cc1Swenshuai.xi #endif
144*53ee8cc1Swenshuai.xi 
145*53ee8cc1Swenshuai.xi /* Close the directory stream DIRP.
146*53ee8cc1Swenshuai.xi    Return 0 if successful, -1 if not.
147*53ee8cc1Swenshuai.xi 
148*53ee8cc1Swenshuai.xi    This function is a possible cancellation point and therefore not
149*53ee8cc1Swenshuai.xi    marked with __THROW.  */
150*53ee8cc1Swenshuai.xi extern int closedir (DIR *__dirp) __nonnull ((1));
151*53ee8cc1Swenshuai.xi 
152*53ee8cc1Swenshuai.xi /* Read a directory entry from DIRP.  Return a pointer to a `struct
153*53ee8cc1Swenshuai.xi    dirent' describing the entry, or NULL for EOF or error.  The
154*53ee8cc1Swenshuai.xi    storage returned may be overwritten by a later readdir call on the
155*53ee8cc1Swenshuai.xi    same DIR stream.
156*53ee8cc1Swenshuai.xi 
157*53ee8cc1Swenshuai.xi    If the Large File Support API is selected we have to use the
158*53ee8cc1Swenshuai.xi    appropriate interface.
159*53ee8cc1Swenshuai.xi 
160*53ee8cc1Swenshuai.xi    This function is a possible cancellation point and therefore not
161*53ee8cc1Swenshuai.xi    marked with __THROW.  */
162*53ee8cc1Swenshuai.xi #ifndef __USE_FILE_OFFSET64
163*53ee8cc1Swenshuai.xi extern struct dirent *readdir (DIR *__dirp) __nonnull ((1));
164*53ee8cc1Swenshuai.xi #else
165*53ee8cc1Swenshuai.xi # ifdef __REDIRECT
166*53ee8cc1Swenshuai.xi extern struct dirent *__REDIRECT (readdir, (DIR *__dirp), readdir64)
167*53ee8cc1Swenshuai.xi      __nonnull ((1));
168*53ee8cc1Swenshuai.xi # else
169*53ee8cc1Swenshuai.xi #  define readdir readdir64
170*53ee8cc1Swenshuai.xi # endif
171*53ee8cc1Swenshuai.xi #endif
172*53ee8cc1Swenshuai.xi 
173*53ee8cc1Swenshuai.xi #ifdef __USE_LARGEFILE64
174*53ee8cc1Swenshuai.xi extern struct dirent64 *readdir64 (DIR *__dirp) __nonnull ((1));
175*53ee8cc1Swenshuai.xi #endif
176*53ee8cc1Swenshuai.xi 
177*53ee8cc1Swenshuai.xi #if defined __USE_POSIX || defined __USE_MISC
178*53ee8cc1Swenshuai.xi /* Reentrant version of `readdir'.  Return in RESULT a pointer to the
179*53ee8cc1Swenshuai.xi    next entry.
180*53ee8cc1Swenshuai.xi 
181*53ee8cc1Swenshuai.xi    This function is a possible cancellation point and therefore not
182*53ee8cc1Swenshuai.xi    marked with __THROW.  */
183*53ee8cc1Swenshuai.xi # ifndef __USE_FILE_OFFSET64
184*53ee8cc1Swenshuai.xi extern int readdir_r (DIR *__restrict __dirp,
185*53ee8cc1Swenshuai.xi 		      struct dirent *__restrict __entry,
186*53ee8cc1Swenshuai.xi 		      struct dirent **__restrict __result)
187*53ee8cc1Swenshuai.xi      __nonnull ((1, 2, 3));
188*53ee8cc1Swenshuai.xi # else
189*53ee8cc1Swenshuai.xi #  ifdef __REDIRECT
190*53ee8cc1Swenshuai.xi extern int __REDIRECT (readdir_r,
191*53ee8cc1Swenshuai.xi 		       (DIR *__restrict __dirp,
192*53ee8cc1Swenshuai.xi 			struct dirent *__restrict __entry,
193*53ee8cc1Swenshuai.xi 			struct dirent **__restrict __result),
194*53ee8cc1Swenshuai.xi 		       readdir64_r) __nonnull ((1, 2, 3));
195*53ee8cc1Swenshuai.xi #  else
196*53ee8cc1Swenshuai.xi #   define readdir_r readdir64_r
197*53ee8cc1Swenshuai.xi #  endif
198*53ee8cc1Swenshuai.xi # endif
199*53ee8cc1Swenshuai.xi 
200*53ee8cc1Swenshuai.xi # ifdef __USE_LARGEFILE64
201*53ee8cc1Swenshuai.xi extern int readdir64_r (DIR *__restrict __dirp,
202*53ee8cc1Swenshuai.xi 			struct dirent64 *__restrict __entry,
203*53ee8cc1Swenshuai.xi 			struct dirent64 **__restrict __result)
204*53ee8cc1Swenshuai.xi      __nonnull ((1, 2, 3));
205*53ee8cc1Swenshuai.xi # endif
206*53ee8cc1Swenshuai.xi #endif	/* POSIX or misc */
207*53ee8cc1Swenshuai.xi 
208*53ee8cc1Swenshuai.xi /* Rewind DIRP to the beginning of the directory.  */
209*53ee8cc1Swenshuai.xi extern void rewinddir (DIR *__dirp) __THROW __nonnull ((1));
210*53ee8cc1Swenshuai.xi 
211*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_MISC || defined __USE_XOPEN
212*53ee8cc1Swenshuai.xi # include <bits/types.h>
213*53ee8cc1Swenshuai.xi 
214*53ee8cc1Swenshuai.xi /* Seek to position POS on DIRP.  */
215*53ee8cc1Swenshuai.xi extern void seekdir (DIR *__dirp, long int __pos) __THROW __nonnull ((1));
216*53ee8cc1Swenshuai.xi 
217*53ee8cc1Swenshuai.xi /* Return the current position of DIRP.  */
218*53ee8cc1Swenshuai.xi extern long int telldir (DIR *__dirp) __THROW __nonnull ((1));
219*53ee8cc1Swenshuai.xi #endif
220*53ee8cc1Swenshuai.xi 
221*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_MISC
222*53ee8cc1Swenshuai.xi 
223*53ee8cc1Swenshuai.xi /* Return the file descriptor used by DIRP.  */
224*53ee8cc1Swenshuai.xi extern int dirfd (DIR *__dirp) __THROW __nonnull ((1));
225*53ee8cc1Swenshuai.xi 
226*53ee8cc1Swenshuai.xi # if defined __OPTIMIZE__ && defined _DIR_dirfd
227*53ee8cc1Swenshuai.xi #  define dirfd(dirp)	_DIR_dirfd (dirp)
228*53ee8cc1Swenshuai.xi # endif
229*53ee8cc1Swenshuai.xi 
230*53ee8cc1Swenshuai.xi # ifndef MAXNAMLEN
231*53ee8cc1Swenshuai.xi /* Get the definitions of the POSIX.1 limits.  */
232*53ee8cc1Swenshuai.xi #  include <bits/posix1_lim.h>
233*53ee8cc1Swenshuai.xi 
234*53ee8cc1Swenshuai.xi /* `MAXNAMLEN' is the BSD name for what POSIX calls `NAME_MAX'.  */
235*53ee8cc1Swenshuai.xi #  ifdef NAME_MAX
236*53ee8cc1Swenshuai.xi #   define MAXNAMLEN	NAME_MAX
237*53ee8cc1Swenshuai.xi #  else
238*53ee8cc1Swenshuai.xi #   define MAXNAMLEN	255
239*53ee8cc1Swenshuai.xi #  endif
240*53ee8cc1Swenshuai.xi # endif
241*53ee8cc1Swenshuai.xi 
242*53ee8cc1Swenshuai.xi # define __need_size_t
243*53ee8cc1Swenshuai.xi # include <stddef.h>
244*53ee8cc1Swenshuai.xi 
245*53ee8cc1Swenshuai.xi /* Scan the directory DIR, calling SELECTOR on each directory entry.
246*53ee8cc1Swenshuai.xi    Entries for which SELECT returns nonzero are individually malloc'd,
247*53ee8cc1Swenshuai.xi    sorted using qsort with CMP, and collected in a malloc'd array in
248*53ee8cc1Swenshuai.xi    *NAMELIST.  Returns the number of entries selected, or -1 on error.  */
249*53ee8cc1Swenshuai.xi # ifndef __USE_FILE_OFFSET64
250*53ee8cc1Swenshuai.xi extern int scandir (__const char *__restrict __dir,
251*53ee8cc1Swenshuai.xi 		    struct dirent ***__restrict __namelist,
252*53ee8cc1Swenshuai.xi 		    int (*__selector) (__const struct dirent *),
253*53ee8cc1Swenshuai.xi 		    int (*__cmp) (__const void *, __const void *))
254*53ee8cc1Swenshuai.xi      __nonnull ((1, 2));
255*53ee8cc1Swenshuai.xi # else
256*53ee8cc1Swenshuai.xi #  ifdef __REDIRECT
257*53ee8cc1Swenshuai.xi extern int __REDIRECT (scandir,
258*53ee8cc1Swenshuai.xi 		       (__const char *__restrict __dir,
259*53ee8cc1Swenshuai.xi 			struct dirent ***__restrict __namelist,
260*53ee8cc1Swenshuai.xi 			int (*__selector) (__const struct dirent *),
261*53ee8cc1Swenshuai.xi 			int (*__cmp) (__const void *, __const void *)),
262*53ee8cc1Swenshuai.xi 		       scandir64) __nonnull ((1, 2));
263*53ee8cc1Swenshuai.xi #  else
264*53ee8cc1Swenshuai.xi #   define scandir scandir64
265*53ee8cc1Swenshuai.xi #  endif
266*53ee8cc1Swenshuai.xi # endif
267*53ee8cc1Swenshuai.xi 
268*53ee8cc1Swenshuai.xi # if defined __USE_GNU && defined __USE_LARGEFILE64
269*53ee8cc1Swenshuai.xi /* This function is like `scandir' but it uses the 64bit dirent structure.
270*53ee8cc1Swenshuai.xi    Please note that the CMP function must now work with struct dirent64 **.  */
271*53ee8cc1Swenshuai.xi extern int scandir64 (__const char *__restrict __dir,
272*53ee8cc1Swenshuai.xi 		      struct dirent64 ***__restrict __namelist,
273*53ee8cc1Swenshuai.xi 		      int (*__selector) (__const struct dirent64 *),
274*53ee8cc1Swenshuai.xi 		      int (*__cmp) (__const void *, __const void *))
275*53ee8cc1Swenshuai.xi      __nonnull ((1, 2));
276*53ee8cc1Swenshuai.xi # endif
277*53ee8cc1Swenshuai.xi 
278*53ee8cc1Swenshuai.xi /* Function to compare two `struct dirent's alphabetically.  */
279*53ee8cc1Swenshuai.xi # ifndef __USE_FILE_OFFSET64
280*53ee8cc1Swenshuai.xi extern int alphasort (__const void *__e1, __const void *__e2)
281*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__ __nonnull ((1, 2));
282*53ee8cc1Swenshuai.xi # else
283*53ee8cc1Swenshuai.xi #  ifdef __REDIRECT
284*53ee8cc1Swenshuai.xi extern int __REDIRECT_NTH (alphasort,
285*53ee8cc1Swenshuai.xi 			   (__const void *__e1, __const void *__e2),
286*53ee8cc1Swenshuai.xi 			   alphasort64) __attribute_pure__ __nonnull ((1, 2));
287*53ee8cc1Swenshuai.xi #  else
288*53ee8cc1Swenshuai.xi #   define alphasort alphasort64
289*53ee8cc1Swenshuai.xi #  endif
290*53ee8cc1Swenshuai.xi # endif
291*53ee8cc1Swenshuai.xi 
292*53ee8cc1Swenshuai.xi # if defined __USE_GNU && defined __USE_LARGEFILE64
293*53ee8cc1Swenshuai.xi extern int alphasort64 (__const void *__e1, __const void *__e2)
294*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__ __nonnull ((1, 2));
295*53ee8cc1Swenshuai.xi # endif
296*53ee8cc1Swenshuai.xi 
297*53ee8cc1Swenshuai.xi # ifdef __USE_GNU
298*53ee8cc1Swenshuai.xi /* Function to compare two `struct dirent's by name & version.  */
299*53ee8cc1Swenshuai.xi #  ifndef __USE_FILE_OFFSET64
300*53ee8cc1Swenshuai.xi extern int versionsort (__const void *__e1, __const void *__e2)
301*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__ __nonnull ((1, 2));
302*53ee8cc1Swenshuai.xi #  else
303*53ee8cc1Swenshuai.xi #   ifdef __REDIRECT
304*53ee8cc1Swenshuai.xi extern int __REDIRECT_NTH (versionsort,
305*53ee8cc1Swenshuai.xi 			   (__const void *__e1, __const void *__e2),
306*53ee8cc1Swenshuai.xi 			   versionsort64)
307*53ee8cc1Swenshuai.xi      __attribute_pure__ __nonnull ((1, 2));
308*53ee8cc1Swenshuai.xi #   else
309*53ee8cc1Swenshuai.xi #    define versionsort versionsort64
310*53ee8cc1Swenshuai.xi #   endif
311*53ee8cc1Swenshuai.xi #  endif
312*53ee8cc1Swenshuai.xi 
313*53ee8cc1Swenshuai.xi #  ifdef __USE_LARGEFILE64
314*53ee8cc1Swenshuai.xi extern int versionsort64 (__const void *__e1, __const void *__e2)
315*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__ __nonnull ((1, 2));
316*53ee8cc1Swenshuai.xi #  endif
317*53ee8cc1Swenshuai.xi # endif
318*53ee8cc1Swenshuai.xi 
319*53ee8cc1Swenshuai.xi /* Read directory entries from FD into BUF, reading at most NBYTES.
320*53ee8cc1Swenshuai.xi    Reading starts at offset *BASEP, and *BASEP is updated with the new
321*53ee8cc1Swenshuai.xi    position after reading.  Returns the number of bytes read; zero when at
322*53ee8cc1Swenshuai.xi    end of directory; or -1 for errors.  */
323*53ee8cc1Swenshuai.xi # ifndef __USE_FILE_OFFSET64
324*53ee8cc1Swenshuai.xi extern __ssize_t getdirentries (int __fd, char *__restrict __buf,
325*53ee8cc1Swenshuai.xi 				size_t __nbytes,
326*53ee8cc1Swenshuai.xi 				__off_t *__restrict __basep)
327*53ee8cc1Swenshuai.xi      __THROW __nonnull ((2, 4));
328*53ee8cc1Swenshuai.xi # else
329*53ee8cc1Swenshuai.xi #  ifdef __REDIRECT
330*53ee8cc1Swenshuai.xi extern __ssize_t __REDIRECT_NTH (getdirentries,
331*53ee8cc1Swenshuai.xi 				 (int __fd, char *__restrict __buf,
332*53ee8cc1Swenshuai.xi 				  size_t __nbytes,
333*53ee8cc1Swenshuai.xi 				  __off64_t *__restrict __basep),
334*53ee8cc1Swenshuai.xi 				 getdirentries64) __nonnull ((2, 4));
335*53ee8cc1Swenshuai.xi #  else
336*53ee8cc1Swenshuai.xi #   define getdirentries getdirentries64
337*53ee8cc1Swenshuai.xi #  endif
338*53ee8cc1Swenshuai.xi # endif
339*53ee8cc1Swenshuai.xi 
340*53ee8cc1Swenshuai.xi # ifdef __USE_LARGEFILE64
341*53ee8cc1Swenshuai.xi extern __ssize_t getdirentries64 (int __fd, char *__restrict __buf,
342*53ee8cc1Swenshuai.xi 				  size_t __nbytes,
343*53ee8cc1Swenshuai.xi 				  __off64_t *__restrict __basep)
344*53ee8cc1Swenshuai.xi      __THROW __nonnull ((2, 4));
345*53ee8cc1Swenshuai.xi # endif
346*53ee8cc1Swenshuai.xi 
347*53ee8cc1Swenshuai.xi #endif /* Use BSD or misc.  */
348*53ee8cc1Swenshuai.xi 
349*53ee8cc1Swenshuai.xi __END_DECLS
350*53ee8cc1Swenshuai.xi 
351*53ee8cc1Swenshuai.xi #endif /* dirent.h  */
352