• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3/arm-linux/sysroot/usr/include/
1/* Copyright (C) 1991-2000, 2003-2005, 2009 Free Software Foundation, Inc.
2   This file is part of the GNU C Library.
3
4   The GNU C Library is free software; you can redistribute it and/or
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.
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
12   Lesser General Public License for more details.
13
14   You should have received a copy of the GNU Lesser General Public
15   License along with the GNU C Library; if not, write to the Free
16   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17   02111-1307 USA.  */
18
19/*
20 *	POSIX Standard: 5.1.2 Directory Operations	<dirent.h>
21 */
22
23#ifndef	_DIRENT_H
24#define	_DIRENT_H	1
25
26#include <features.h>
27
28__BEGIN_DECLS
29
30#include <bits/types.h>
31
32#ifdef __USE_XOPEN
33# ifndef __ino_t_defined
34#  ifndef __USE_FILE_OFFSET64
35typedef __ino_t ino_t;
36#  else
37typedef __ino64_t ino_t;
38#  endif
39#  define __ino_t_defined
40# endif
41# if defined __USE_LARGEFILE64 && !defined __ino64_t_defined
42typedef __ino64_t ino64_t;
43#  define __ino64_t_defined
44# endif
45#endif
46
47/* This file defines `struct dirent'.
48
49   It defines the macro `_DIRENT_HAVE_D_NAMLEN' iff there is a `d_namlen'
50   member that gives the length of `d_name'.
51
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.
54
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.
57
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
67
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.
72
73   _D_EXACT_NAMLEN (DP)	returns the length of DP->d_name, not including
74   its terminating null character.
75
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   */
81
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)
85#else
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
94
95
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    DT_WHT = 14
117# define DT_WHT		DT_WHT
118  };
119
120/* Convert between stat structure types and directory types.  */
121# define IFTODT(mode)	(((mode) & 0170000) >> 12)
122# define DTTOIF(dirtype)	((dirtype) << 12)
123#endif
124
125
126/* This is the data type of directory stream objects.
127   The actual structure is opaque to users.  */
128typedef struct __dirstream DIR;
129
130/* Open a directory stream on NAME.
131   Return a DIR stream on the directory, or NULL if it could not be opened.
132
133   This function is a possible cancellation point and therefore not
134   marked with __THROW.  */
135extern DIR *opendir (__const char *__name) __nonnull ((1));
136
137#ifdef __USE_XOPEN2K8
138/* Same as opendir, but open the stream on the file descriptor FD.
139
140   This function is a possible cancellation point and therefore not
141   marked with __THROW.  */
142extern DIR *fdopendir (int __fd);
143#endif
144
145/* Close the directory stream DIRP.
146   Return 0 if successful, -1 if not.
147
148   This function is a possible cancellation point and therefore not
149   marked with __THROW.  */
150extern int closedir (DIR *__dirp) __nonnull ((1));
151
152/* Read a directory entry from DIRP.  Return a pointer to a `struct
153   dirent' describing the entry, or NULL for EOF or error.  The
154   storage returned may be overwritten by a later readdir call on the
155   same DIR stream.
156
157   If the Large File Support API is selected we have to use the
158   appropriate interface.
159
160   This function is a possible cancellation point and therefore not
161   marked with __THROW.  */
162#ifndef __USE_FILE_OFFSET64
163extern struct dirent *readdir (DIR *__dirp) __nonnull ((1));
164#else
165# ifdef __REDIRECT
166extern struct dirent *__REDIRECT (readdir, (DIR *__dirp), readdir64)
167     __nonnull ((1));
168# else
169#  define readdir readdir64
170# endif
171#endif
172
173#ifdef __USE_LARGEFILE64
174extern struct dirent64 *readdir64 (DIR *__dirp) __nonnull ((1));
175#endif
176
177#if defined __USE_POSIX || defined __USE_MISC
178/* Reentrant version of `readdir'.  Return in RESULT a pointer to the
179   next entry.
180
181   This function is a possible cancellation point and therefore not
182   marked with __THROW.  */
183# ifndef __USE_FILE_OFFSET64
184extern int readdir_r (DIR *__restrict __dirp,
185		      struct dirent *__restrict __entry,
186		      struct dirent **__restrict __result)
187     __nonnull ((1, 2, 3));
188# else
189#  ifdef __REDIRECT
190extern int __REDIRECT (readdir_r,
191		       (DIR *__restrict __dirp,
192			struct dirent *__restrict __entry,
193			struct dirent **__restrict __result),
194		       readdir64_r) __nonnull ((1, 2, 3));
195#  else
196#   define readdir_r readdir64_r
197#  endif
198# endif
199
200# ifdef __USE_LARGEFILE64
201extern int readdir64_r (DIR *__restrict __dirp,
202			struct dirent64 *__restrict __entry,
203			struct dirent64 **__restrict __result)
204     __nonnull ((1, 2, 3));
205# endif
206#endif	/* POSIX or misc */
207
208/* Rewind DIRP to the beginning of the directory.  */
209extern void rewinddir (DIR *__dirp) __THROW __nonnull ((1));
210
211#if defined __USE_BSD || defined __USE_MISC || defined __USE_XOPEN
212# include <bits/types.h>
213
214/* Seek to position POS on DIRP.  */
215extern void seekdir (DIR *__dirp, long int __pos) __THROW __nonnull ((1));
216
217/* Return the current position of DIRP.  */
218extern long int telldir (DIR *__dirp) __THROW __nonnull ((1));
219#endif
220
221#if defined __USE_BSD || defined __USE_MISC || defined __XOPEN_2K8
222
223/* Return the file descriptor used by DIRP.  */
224extern int dirfd (DIR *__dirp) __THROW __nonnull ((1));
225
226# if 0 /* defined __OPTIMIZE__ && defined _DIR_dirfd */
227#  define dirfd(dirp)	_DIR_dirfd (dirp)
228# endif
229
230# if defined __USE_BSD || defined __USE_MISC
231#  ifndef MAXNAMLEN
232/* Get the definitions of the POSIX.1 limits.  */
233#  include <bits/posix1_lim.h>
234
235/* `MAXNAMLEN' is the BSD name for what POSIX calls `NAME_MAX'.  */
236#   ifdef NAME_MAX
237#    define MAXNAMLEN	NAME_MAX
238#   else
239#    define MAXNAMLEN	255
240#   endif
241#  endif
242# endif
243
244# define __need_size_t
245# include <stddef.h>
246
247/* Scan the directory DIR, calling SELECTOR on each directory entry.
248   Entries for which SELECT returns nonzero are individually malloc'd,
249   sorted using qsort with CMP, and collected in a malloc'd array in
250   *NAMELIST.  Returns the number of entries selected, or -1 on error.  */
251# ifndef __USE_FILE_OFFSET64
252extern int scandir (__const char *__restrict __dir,
253		    struct dirent ***__restrict __namelist,
254		    int (*__selector) (__const struct dirent *),
255		    int (*__cmp) (__const struct dirent **,
256				  __const struct dirent **))
257     __nonnull ((1, 2));
258# else
259#  ifdef __REDIRECT
260extern int __REDIRECT (scandir,
261		       (__const char *__restrict __dir,
262			struct dirent ***__restrict __namelist,
263			int (*__selector) (__const struct dirent *),
264			int (*__cmp) (__const struct dirent **,
265				      __const struct dirent **)),
266		       scandir64) __nonnull ((1, 2));
267#  else
268#   define scandir scandir64
269#  endif
270# endif
271
272# if defined __USE_GNU && defined __USE_LARGEFILE64
273/* This function is like `scandir' but it uses the 64bit dirent structure.
274   Please note that the CMP function must now work with struct dirent64 **.  */
275extern int scandir64 (__const char *__restrict __dir,
276		      struct dirent64 ***__restrict __namelist,
277		      int (*__selector) (__const struct dirent64 *),
278		      int (*__cmp) (__const struct dirent64 **,
279				    __const struct dirent64 **))
280     __nonnull ((1, 2));
281# endif
282
283/* Function to compare two `struct dirent's alphabetically.  */
284# ifndef __USE_FILE_OFFSET64
285extern int alphasort (__const struct dirent **__e1,
286		      __const struct dirent **__e2)
287     __THROW __attribute_pure__ __nonnull ((1, 2));
288# else
289#  ifdef __REDIRECT
290extern int __REDIRECT_NTH (alphasort,
291			   (__const struct dirent **__e1,
292			    __const struct dirent **__e2),
293			   alphasort64) __attribute_pure__ __nonnull ((1, 2));
294#  else
295#   define alphasort alphasort64
296#  endif
297# endif
298
299# if defined __USE_GNU && defined __USE_LARGEFILE64
300extern int alphasort64 (__const struct dirent64 **__e1,
301			__const struct dirent64 **__e2)
302     __THROW __attribute_pure__ __nonnull ((1, 2));
303# endif
304#endif /* Use BSD or misc or XPG7.  */
305
306
307#if defined __USE_BSD || defined __USE_MISC
308/* Read directory entries from FD into BUF, reading at most NBYTES.
309   Reading starts at offset *BASEP, and *BASEP is updated with the new
310   position after reading.  Returns the number of bytes read; zero when at
311   end of directory; or -1 for errors.  */
312# ifndef __USE_FILE_OFFSET64
313extern __ssize_t getdirentries (int __fd, char *__restrict __buf,
314				size_t __nbytes,
315				__off_t *__restrict __basep)
316     __THROW __nonnull ((2, 4));
317# else
318#  ifdef __REDIRECT
319extern __ssize_t __REDIRECT_NTH (getdirentries,
320				 (int __fd, char *__restrict __buf,
321				  size_t __nbytes,
322				  __off64_t *__restrict __basep),
323				 getdirentries64) __nonnull ((2, 4));
324#  else
325#   define getdirentries getdirentries64
326#  endif
327# endif
328
329# ifdef __USE_LARGEFILE64
330extern __ssize_t getdirentries64 (int __fd, char *__restrict __buf,
331				  size_t __nbytes,
332				  __off64_t *__restrict __basep)
333     __THROW __nonnull ((2, 4));
334# endif
335#endif /* Use BSD or misc.  */
336
337#ifdef __USE_GNU
338/* Function to compare two `struct dirent's by name & version.  */
339# ifndef __USE_FILE_OFFSET64
340extern int versionsort (__const struct dirent **__e1,
341			__const struct dirent **__e2)
342     __THROW __attribute_pure__ __nonnull ((1, 2));
343# else
344#  ifdef __REDIRECT
345extern int __REDIRECT_NTH (versionsort,
346			   (__const struct dirent **__e1,
347			    __const struct dirent **__e2),
348			   versionsort64)
349     __attribute_pure__ __nonnull ((1, 2));
350#  else
351#   define versionsort versionsort64
352#  endif
353# endif
354
355# ifdef __USE_LARGEFILE64
356extern int versionsort64 (__const struct dirent64 **__e1,
357			  __const struct dirent64 **__e2)
358     __THROW __attribute_pure__ __nonnull ((1, 2));
359# endif
360#endif /* Use GNU.  */
361
362__END_DECLS
363
364#endif /* dirent.h  */
365