]>
Commit | Line | Data |
---|---|---|
28f540f4 RM |
1 | /* Copyright (C) 1991, 1992, 1993, 1994 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 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. | |
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 | Library General Public License for more details. | |
13 | ||
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 | |
16 | not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave, | |
17 | Cambridge, MA 02139, USA. */ | |
18 | ||
19 | /* | |
20 | * POSIX Standard: 5.1.2 Directory Operations <dirent.h> | |
21 | */ | |
22 | ||
23 | #ifndef _DIRENT_H | |
24 | ||
25 | #define _DIRENT_H 1 | |
26 | #include <features.h> | |
27 | ||
28 | __BEGIN_DECLS | |
29 | ||
30 | #include <gnu/types.h> | |
31 | ||
32 | ||
33 | /* Directory entry structure. | |
34 | ||
35 | This structure is laid out identically to the `struct direct' that | |
36 | represents directory entries in the GNU Hurd and in BSD 4.4 (and | |
37 | incidentally, on disk in the Berkeley fast file system). The `readdir' | |
38 | implementations for GNU and BSD know this; you must change them if you | |
39 | change this structure. */ | |
40 | ||
41 | struct dirent | |
42 | { | |
43 | __ino_t d_fileno; /* File serial number. */ | |
44 | unsigned short int d_reclen; /* Length of the whole `struct dirent'. */ | |
45 | unsigned char d_type; /* File type, possibly unknown. */ | |
46 | unsigned char d_namlen; /* Length of the file name. */ | |
47 | ||
48 | /* Only this member is in the POSIX standard. */ | |
49 | char d_name[1]; /* File name (actually longer). */ | |
50 | }; | |
51 | ||
52 | #if defined(__USE_BSD) || defined(__USE_MISC) | |
53 | #define d_ino d_fileno /* Backward compatibility. */ | |
54 | #endif | |
55 | ||
56 | #ifdef __USE_BSD | |
57 | /* File types for `d_type'. */ | |
58 | enum | |
59 | { | |
60 | DT_UNKNOWN = 0, | |
61 | DT_FIFO = 1, | |
62 | DT_CHR = 2, | |
63 | DT_DIR = 4, | |
64 | DT_BLK = 6, | |
65 | DT_REG = 8, | |
66 | DT_LNK = 10, | |
67 | DT_SOCK = 12 | |
68 | }; | |
69 | ||
70 | /* Convert between stat structure types and directory types. */ | |
71 | #define IFTODT(mode) (((mode) & 0170000) >> 12) | |
72 | #define DTTOIF(dirtype) ((dirtype) << 12) | |
73 | #endif | |
74 | ||
75 | ||
76 | /* Get the system-dependent definition of `DIR', | |
77 | the data type of directory stream objects. */ | |
78 | #include <dirstream.h> | |
79 | ||
80 | /* Open a directory stream on NAME. | |
81 | Return a DIR stream on the directory, or NULL if it could not be opened. */ | |
82 | extern DIR *opendir __P ((__const char *__name)); | |
83 | ||
84 | /* Close the directory stream DIRP. | |
85 | Return 0 if successful, -1 if not. */ | |
86 | extern int closedir __P ((DIR * __dirp)); | |
87 | ||
88 | /* Read a directory entry from DIRP. | |
89 | Return a pointer to a `struct dirent' describing the entry, | |
90 | or NULL for EOF or error. The storage returned may be overwritten | |
91 | by a later readdir call on the same DIR stream. */ | |
92 | extern struct dirent *readdir __P ((DIR * __dirp)); | |
93 | ||
94 | /* Rewind DIRP to the beginning of the directory. */ | |
95 | extern void rewinddir __P ((DIR * __dirp)); | |
96 | ||
97 | #if defined(__USE_BSD) || defined(__USE_MISC) | |
98 | ||
99 | #ifndef MAXNAMLEN | |
100 | /* Get the definitions of the POSIX.1 limits. */ | |
101 | #include <posix1_lim.h> | |
102 | ||
103 | /* `MAXNAMLEN' is the BSD name for what POSIX calls `NAME_MAX'. */ | |
104 | #ifdef NAME_MAX | |
105 | #define MAXNAMLEN NAME_MAX | |
106 | #else | |
107 | #define MAXNAMLEN 255 | |
108 | #endif | |
109 | #endif | |
110 | ||
111 | #include <gnu/types.h> | |
112 | #define __need_size_t | |
113 | #include <stddef.h> | |
114 | ||
115 | /* Seek to position POS on DIRP. */ | |
116 | extern void seekdir __P ((DIR * __dirp, __off_t __pos)); | |
117 | ||
118 | /* Return the current position of DIRP. */ | |
119 | extern __off_t telldir __P ((DIR * __dirp)); | |
120 | ||
121 | /* Scan the directory DIR, calling SELECT on each directory entry. | |
122 | Entries for which SELECT returns nonzero are individually malloc'd, | |
123 | sorted using qsort with CMP, and collected in a malloc'd array in | |
124 | *NAMELIST. Returns the number of entries selected, or -1 on error. */ | |
125 | extern int scandir __P ((__const char *__dir, | |
126 | struct dirent ***__namelist, | |
127 | int (*__select) __P ((struct dirent *)), | |
128 | int (*__cmp) __P ((__const __ptr_t, | |
129 | __const __ptr_t)))); | |
130 | ||
131 | /* Function to compare two `struct dirent's alphabetically. */ | |
132 | extern int alphasort __P ((__const __ptr_t, __const __ptr_t)); | |
133 | ||
134 | ||
135 | /* Read directory entries from FD into BUF, reading at most NBYTES. | |
136 | Reading starts at offset *BASEP, and *BASEP is updated with the new | |
137 | position after reading. Returns the number of bytes read; zero when at | |
138 | end of directory; or -1 for errors. */ | |
139 | extern __ssize_t __getdirentries __P ((int __fd, char *__buf, | |
140 | size_t __nbytes, __off_t *__basep)); | |
141 | extern __ssize_t getdirentries __P ((int __fd, char *__buf, | |
142 | size_t __nbytes, __off_t *__basep)); | |
143 | ||
144 | ||
145 | #endif /* Use BSD or misc. */ | |
146 | ||
147 | __END_DECLS | |
148 | ||
149 | #endif /* dirent.h */ |