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