OpenCores
URL https://opencores.org/ocsvn/c0or1k/c0or1k/trunk

Subversion Repositories c0or1k

[/] [c0or1k/] [trunk/] [conts/] [posix/] [libposix/] [include/] [posix/] [dirent.h] - Blame information for rev 2

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.