source: svn/trunk/newcon3bcm2_21bu/toolchain/mips-linux-uclibc/include/dirent.h

Last change on this file was 2, checked in by jglee, 11 years ago

first commit

  • Property svn:executable set to *
File size: 8.2 KB
Line 
1/* Copyright (C) 1991-1999, 2000 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.  */
132extern DIR *opendir (__const char *__name) __THROW;
133
134/* Close the directory stream DIRP.
135   Return 0 if successful, -1 if not.  */
136extern int closedir (DIR *__dirp) __THROW;
137
138/* Read a directory entry from DIRP.  Return a pointer to a `struct
139   dirent' describing the entry, or NULL for EOF or error.  The
140   storage returned may be overwritten by a later readdir call on the
141   same DIR stream.
142
143   If the Large File Support API is selected we have to use the
144   appropriate interface.  */
145#ifndef __USE_FILE_OFFSET64
146extern struct dirent *readdir (DIR *__dirp) __THROW;
147#else
148# ifdef __REDIRECT
149extern struct dirent *__REDIRECT (readdir, (DIR *__dirp) __THROW, readdir64);
150# else
151#  define readdir readdir64
152# endif
153#endif
154
155#ifdef __USE_LARGEFILE64
156extern struct dirent64 *readdir64 (DIR *__dirp) __THROW;
157#endif
158
159#if defined __USE_POSIX || defined __USE_MISC
160/* Reentrant version of `readdir'.  Return in RESULT a pointer to the
161   next entry.  */
162# ifndef __USE_FILE_OFFSET64
163extern int readdir_r (DIR *__restrict __dirp,
164                      struct dirent *__restrict __entry,
165                      struct dirent **__restrict __result) __THROW;
166# else
167#  ifdef __REDIRECT
168extern int __REDIRECT (readdir_r,
169                       (DIR *__restrict __dirp,
170                        struct dirent *__restrict __entry,
171                        struct dirent **__restrict __result) __THROW,
172                       readdir64_r);
173#  else
174#   define readdir_r readdir64_r
175#  endif
176# endif
177
178# ifdef __USE_LARGEFILE64
179extern int readdir64_r (DIR *__restrict __dirp,
180                        struct dirent64 *__restrict __entry,
181                        struct dirent64 **__restrict __result) __THROW;
182# endif
183#endif  /* POSIX or misc */
184
185/* Rewind DIRP to the beginning of the directory.  */
186extern void rewinddir (DIR *__dirp) __THROW;
187
188#if defined __USE_BSD || defined __USE_MISC || defined __USE_XOPEN
189# include <bits/types.h>
190
191/* Seek to position POS on DIRP.  */
192extern void seekdir (DIR *__dirp, long int __pos) __THROW;
193
194/* Return the current position of DIRP.  */
195extern long int telldir (DIR *__dirp) __THROW;
196#endif
197
198#if defined __USE_BSD || defined __USE_MISC
199
200/* Return the file descriptor used by DIRP.  */
201extern int dirfd (DIR *__dirp) __THROW;
202
203# ifndef MAXNAMLEN
204/* Get the definitions of the POSIX.1 limits.  */
205#  include <bits/posix1_lim.h>
206
207/* `MAXNAMLEN' is the BSD name for what POSIX calls `NAME_MAX'.  */
208#  ifdef NAME_MAX
209#   define MAXNAMLEN    NAME_MAX
210#  else
211#   define MAXNAMLEN    255
212#  endif
213# endif
214
215# define __need_size_t
216# include <stddef.h>
217
218/* Scan the directory DIR, calling SELECTOR on each directory entry.
219   Entries for which SELECT returns nonzero are individually malloc'd,
220   sorted using qsort with CMP, and collected in a malloc'd array in
221   *NAMELIST.  Returns the number of entries selected, or -1 on error.  */
222# ifndef __USE_FILE_OFFSET64
223extern int scandir (__const char *__restrict __dir,
224                    struct dirent ***__restrict __namelist,
225                    int (*__selector) (__const struct dirent *),
226                    int (*__cmp) (__const void *, __const void *)) __THROW;
227# else
228#  ifdef __REDIRECT
229extern int __REDIRECT (scandir,
230                       (__const char *__restrict __dir,
231                        struct dirent ***__restrict __namelist,
232                        int (*__selector) (__const struct dirent *),
233                        int (*__cmp) (__const void *, __const void *)) __THROW,
234                       scandir64);
235#  else
236#   define scandir scandir64
237#  endif
238# endif
239
240# if defined __USE_GNU && defined __USE_LARGEFILE64
241/* This function is like `scandir' but it uses the 64bit dirent structure.
242   Please note that the CMP function must now work with struct dirent64 **.  */
243extern int scandir64 (__const char *__restrict __dir,
244                      struct dirent64 ***__restrict __namelist,
245                      int (*__selector) (__const struct dirent64 *),
246                      int (*__cmp) (__const void *, __const void *)) __THROW;
247# endif
248
249/* Function to compare two `struct dirent's alphabetically.  */
250# ifndef __USE_FILE_OFFSET64
251extern int alphasort (__const void *__e1, __const void *__e2)
252     __THROW __attribute_pure__;
253# else
254#  ifdef __REDIRECT
255extern int __REDIRECT (alphasort,
256                       (__const void *__e1, __const void *__e2)
257                       __THROW,
258                       alphasort64) __attribute_pure__;
259#  else
260#   define alphasort alphasort64
261#  endif
262# endif
263
264# if defined __USE_GNU && defined __USE_LARGEFILE64
265extern int alphasort64 (__const void *__e1, __const void *__e2)
266     __THROW __attribute_pure__;
267# endif
268
269
270#endif /* Use BSD or misc.  */
271
272__END_DECLS
273
274#endif /* dirent.h  */
Note: See TracBrowser for help on using the repository browser.