]> git.llucax.com Git - software/druntime.git/blob - import/stdc/posix/dirent.d
Applied all D2 changes to trunk. It should now be a fully functional D2 runtime.
[software/druntime.git] / import / stdc / posix / dirent.d
1 /**
2  * D header file for POSIX.
3  *
4  * Copyright: Public Domain
5  * License:   Public Domain
6  * Authors:   Sean Kelly
7  * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
8  */
9 module stdc.posix.dirent;
10
11 private import stdc.posix.config;
12 public import stdc.posix.sys.types; // for ino_t
13
14 extern (C):
15
16 //
17 // Required
18 //
19 /*
20 DIR
21
22 struct dirent
23 {
24     char[] d_name;
25 }
26
27 int     closedir(DIR*);
28 DIR*    opendir(in char*);
29 dirent* readdir(DIR*);
30 void    rewinddir(DIR*);
31 */
32
33 version( linux )
34 {
35     // NOTE: The following constants are non-standard Linux definitions
36     //       for dirent.d_type.
37     enum
38     {
39         DT_UNKNOWN  = 0,
40         DT_FIFO     = 1,
41         DT_CHR      = 2,
42         DT_DIR      = 4,
43         DT_BLK      = 6,
44         DT_REG      = 8,
45         DT_LNK      = 10,
46         DT_SOCK     = 12,
47         DT_WHT      = 14
48     }
49
50     struct dirent
51     {
52         ino_t       d_ino;
53         off_t       d_off;
54         ushort      d_reclen;
55         ubyte       d_type;
56         char[256]   d_name;
57     }
58
59     struct DIR
60     {
61         // Managed by OS
62     }
63
64     static if( __USE_LARGEFILE64 )
65     {
66         dirent* readdir64(DIR*);
67         alias   readdir64 readdir;
68     }
69     else
70     {
71         dirent* readdir(DIR*);
72     }
73 }
74 else version( darwin )
75 {
76     enum
77     {
78         DT_UNKNOWN  = 0,
79         DT_FIFO     = 1,
80         DT_CHR      = 2,
81         DT_DIR      = 4,
82         DT_BLK      = 6,
83         DT_REG      = 8,
84         DT_LNK      = 10,
85         DT_SOCK     = 12,
86         DT_WHT      = 14
87     }
88
89     align(4)
90     struct dirent
91     {
92         ino_t       d_ino;
93         ushort      d_reclen;
94         ubyte       d_type;
95         ubyte       d_namlen;
96         char[256]   d_name;
97     }
98
99     struct DIR
100     {
101         // Managed by OS
102     }
103
104     dirent* readdir(DIR*);
105 }
106 else version( freebsd )
107 {
108     enum
109     {
110         DT_UNKNOWN  = 0,
111         DT_FIFO     = 1,
112         DT_CHR      = 2,
113         DT_DIR      = 4,
114         DT_BLK      = 6,
115         DT_REG      = 8,
116         DT_LNK      = 10,
117         DT_SOCK     = 12,
118         DT_WHT      = 14
119     }
120
121     align(4)
122     struct dirent
123     {
124         uint      d_fileno;
125         ushort    d_reclen;
126         ubyte     d_type;
127         ubyte     d_namelen;
128         char[256] d_name;
129     }
130
131     struct _telldir;
132     struct DIR
133     {
134         int       dd_fd;
135         c_long    dd_loc;
136         c_long    dd_size;
137         char*     dd_buf;
138         int       dd_len;
139         c_long    dd_seek;
140         c_long    dd_rewind;
141         int       dd_flags;
142         void*     dd_lock;
143         _telldir* dd_td;
144     }
145
146     dirent* readdir(DIR*);
147 }
148 else
149 {
150     dirent* readdir(DIR*);
151 }
152
153 int     closedir(DIR*);
154 DIR*    opendir(in char*);
155 //dirent* readdir(DIR*);
156 void    rewinddir(DIR*);
157
158 //
159 // Thread-Safe Functions (TSF)
160 //
161 /*
162 int readdir_r(DIR*, dirent*, dirent**);
163 */
164
165 version( linux )
166 {
167   static if( __USE_LARGEFILE64 )
168   {
169     int   readdir_r64(DIR*, dirent*, dirent**);
170     alias readdir_r64 readdir_r;
171   }
172   else
173   {
174     int readdir_r(DIR*, dirent*, dirent**);
175   }
176 }
177 else version( darwin )
178 {
179     int readdir_r(DIR*, dirent*, dirent**);
180 }
181 else version( freebsd )
182 {
183     int readdir_r(DIR*, dirent*, dirent**);
184 }
185
186 //
187 // XOpen (XSI)
188 //
189 /*
190 void   seekdir(DIR*, c_long);
191 c_long telldir(DIR*);
192 */
193
194 version( linux )
195 {
196     void   seekdir(DIR*, c_long);
197     c_long telldir(DIR*);
198 }