Mercurial > projects > ldc
comparison druntime/import/core/sys/posix/sys/stat.d @ 1458:e0b2d67cfe7c
Added druntime (this should be removed once it works).
author | Robert Clipsham <robert@octarineparrot.com> |
---|---|
date | Tue, 02 Jun 2009 17:43:06 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1456:7b218ec1044f | 1458:e0b2d67cfe7c |
---|---|
1 /** | |
2 * D header file for POSIX. | |
3 * | |
4 * Copyright: Copyright Sean Kelly 2005 - 2009. | |
5 * License: <a href="http://www.boost.org/LICENSE_1_0.txt>Boost License 1.0</a>. | |
6 * Authors: Sean Kelly | |
7 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition | |
8 * | |
9 * Copyright Sean Kelly 2005 - 2009. | |
10 * Distributed under the Boost Software License, Version 1.0. | |
11 * (See accompanying file LICENSE_1_0.txt or copy at | |
12 * http://www.boost.org/LICENSE_1_0.txt) | |
13 */ | |
14 module core.sys.posix.sys.stat; | |
15 | |
16 private import core.sys.posix.config; | |
17 private import core.stdc.stdint; | |
18 private import core.sys.posix.time; // for timespec | |
19 public import core.stdc.stddef; // for size_t | |
20 public import core.sys.posix.sys.types; // for off_t, mode_t | |
21 | |
22 extern (C): | |
23 | |
24 // | |
25 // Required | |
26 // | |
27 /* | |
28 struct stat | |
29 { | |
30 dev_t st_dev; | |
31 ino_t st_ino; | |
32 mode_t st_mode; | |
33 nlink_t st_nlink; | |
34 uid_t st_uid; | |
35 gid_t st_gid; | |
36 off_t st_size; | |
37 time_t st_atime; | |
38 time_t st_mtime; | |
39 time_t st_ctime; | |
40 } | |
41 | |
42 S_IRWXU | |
43 S_IRUSR | |
44 S_IWUSR | |
45 S_IXUSR | |
46 S_IRWXG | |
47 S_IRGRP | |
48 S_IWGRP | |
49 S_IXGRP | |
50 S_IRWXO | |
51 S_IROTH | |
52 S_IWOTH | |
53 S_IXOTH | |
54 S_ISUID | |
55 S_ISGID | |
56 S_ISVTX | |
57 | |
58 S_ISBLK(m) | |
59 S_ISCHR(m) | |
60 S_ISDIR(m) | |
61 S_ISFIFO(m) | |
62 S_ISREG(m) | |
63 S_ISLNK(m) | |
64 S_ISSOCK(m) | |
65 | |
66 S_TYPEISMQ(buf) | |
67 S_TYPEISSEM(buf) | |
68 S_TYPEISSHM(buf) | |
69 | |
70 int chmod(in char*, mode_t); | |
71 int fchmod(int, mode_t); | |
72 int fstat(int, stat*); | |
73 int lstat(in char*, stat*); | |
74 int mkdir(in char*, mode_t); | |
75 int mkfifo(in char*, mode_t); | |
76 int stat(in char*, stat*); | |
77 mode_t umask(mode_t); | |
78 */ | |
79 | |
80 version( linux ) | |
81 { | |
82 static if( __USE_LARGEFILE64 ) | |
83 { | |
84 private alias uint _pad_t; | |
85 } | |
86 else | |
87 { | |
88 private alias ushort _pad_t; | |
89 } | |
90 | |
91 struct stat_t | |
92 { | |
93 dev_t st_dev; | |
94 _pad_t __pad1; | |
95 static if( __USE_FILE_OFFSET64 ) | |
96 { | |
97 ino_t __st_ino; | |
98 } | |
99 else | |
100 { | |
101 ino_t st_ino; | |
102 } | |
103 mode_t st_mode; | |
104 nlink_t st_nlink; | |
105 uid_t st_uid; | |
106 gid_t st_gid; | |
107 dev_t st_rdev; | |
108 _pad_t __pad2; | |
109 off_t st_size; | |
110 blksize_t st_blksize; | |
111 blkcnt_t st_blocks; | |
112 static if( false /*__USE_MISC*/ ) // true if _BSD_SOURCE || _SVID_SOURCE | |
113 { | |
114 timespec st_atim; | |
115 timespec st_mtim; | |
116 timespec st_ctim; | |
117 alias st_atim.tv_sec st_atime; | |
118 alias st_mtim.tv_sec st_mtime; | |
119 alias st_ctim.tv_sec st_ctime; | |
120 } | |
121 else | |
122 { | |
123 time_t st_atime; | |
124 c_ulong st_atimensec; | |
125 time_t st_mtime; | |
126 c_ulong st_mtimensec; | |
127 time_t st_ctime; | |
128 c_ulong st_ctimensec; | |
129 } | |
130 static if( __USE_FILE_OFFSET64 ) | |
131 { | |
132 ino_t st_ino; | |
133 } | |
134 else | |
135 { | |
136 c_ulong __unused4; | |
137 c_ulong __unused5; | |
138 } | |
139 } | |
140 | |
141 enum S_IRUSR = 0400; | |
142 enum S_IWUSR = 0200; | |
143 enum S_IXUSR = 0100; | |
144 enum S_IRWXU = S_IRUSR | S_IWUSR | S_IXUSR; | |
145 | |
146 enum S_IRGRP = S_IRUSR >> 3; | |
147 enum S_IWGRP = S_IWUSR >> 3; | |
148 enum S_IXGRP = S_IXUSR >> 3; | |
149 enum S_IRWXG = S_IRWXU >> 3; | |
150 | |
151 enum S_IROTH = S_IRGRP >> 3; | |
152 enum S_IWOTH = S_IWGRP >> 3; | |
153 enum S_IXOTH = S_IXGRP >> 3; | |
154 enum S_IRWXO = S_IRWXG >> 3; | |
155 | |
156 enum S_ISUID = 04000; | |
157 enum S_ISGID = 02000; | |
158 enum S_ISVTX = 01000; | |
159 | |
160 private | |
161 { | |
162 extern (D) bool S_ISTYPE( mode_t mode, uint mask ) | |
163 { | |
164 return ( mode & S_IFMT ) == mask; | |
165 } | |
166 } | |
167 | |
168 extern (D) bool S_ISBLK( mode_t mode ) { return S_ISTYPE( mode, S_IFBLK ); } | |
169 extern (D) bool S_ISCHR( mode_t mode ) { return S_ISTYPE( mode, S_IFCHR ); } | |
170 extern (D) bool S_ISDIR( mode_t mode ) { return S_ISTYPE( mode, S_IFDIR ); } | |
171 extern (D) bool S_ISFIFO( mode_t mode ) { return S_ISTYPE( mode, S_IFIFO ); } | |
172 extern (D) bool S_ISREG( mode_t mode ) { return S_ISTYPE( mode, S_IFREG ); } | |
173 extern (D) bool S_ISLNK( mode_t mode ) { return S_ISTYPE( mode, S_IFLNK ); } | |
174 extern (D) bool S_ISSOCK( mode_t mode ) { return S_ISTYPE( mode, S_IFSOCK ); } | |
175 | |
176 static if( true /*__USE_POSIX199309*/ ) | |
177 { | |
178 extern bool S_TYPEISMQ( stat_t* buf ) { return false; } | |
179 extern bool S_TYPEISSEM( stat_t* buf ) { return false; } | |
180 extern bool S_TYPEISSHM( stat_t* buf ) { return false; } | |
181 } | |
182 } | |
183 else version( OSX ) | |
184 { | |
185 struct stat_t | |
186 { | |
187 dev_t st_dev; | |
188 ino_t st_ino; | |
189 mode_t st_mode; | |
190 nlink_t st_nlink; | |
191 uid_t st_uid; | |
192 gid_t st_gid; | |
193 dev_t st_rdev; | |
194 static if( false /*!_POSIX_C_SOURCE || _DARWIN_C_SOURCE*/ ) | |
195 { | |
196 timespec st_atimespec; | |
197 timespec st_mtimespec; | |
198 timespec st_ctimespec; | |
199 } | |
200 else | |
201 { | |
202 time_t st_atime; | |
203 c_long st_atimensec; | |
204 time_t st_mtime; | |
205 c_long st_mtimensec; | |
206 time_t st_ctime; | |
207 c_long st_ctimensec; | |
208 } | |
209 off_t st_size; | |
210 blkcnt_t st_blocks; | |
211 blksize_t st_blksize; | |
212 uint st_flags; | |
213 uint st_gen; | |
214 int st_lspare; | |
215 long st_qspare[2]; | |
216 } | |
217 | |
218 enum S_IRUSR = 0400; | |
219 enum S_IWUSR = 0200; | |
220 enum S_IXUSR = 0100; | |
221 enum S_IRWXU = S_IRUSR | S_IWUSR | S_IXUSR; | |
222 | |
223 enum S_IRGRP = S_IRUSR >> 3; | |
224 enum S_IWGRP = S_IWUSR >> 3; | |
225 enum S_IXGRP = S_IXUSR >> 3; | |
226 enum S_IRWXG = S_IRWXU >> 3; | |
227 | |
228 enum S_IROTH = S_IRGRP >> 3; | |
229 enum S_IWOTH = S_IWGRP >> 3; | |
230 enum S_IXOTH = S_IXGRP >> 3; | |
231 enum S_IRWXO = S_IRWXG >> 3; | |
232 | |
233 enum S_ISUID = 04000; | |
234 enum S_ISGID = 02000; | |
235 enum S_ISVTX = 01000; | |
236 | |
237 private | |
238 { | |
239 extern (D) bool S_ISTYPE( mode_t mode, uint mask ) | |
240 { | |
241 return ( mode & S_IFMT ) == mask; | |
242 } | |
243 } | |
244 | |
245 extern (D) bool S_ISBLK( mode_t mode ) { return S_ISTYPE( mode, S_IFBLK ); } | |
246 extern (D) bool S_ISCHR( mode_t mode ) { return S_ISTYPE( mode, S_IFCHR ); } | |
247 extern (D) bool S_ISDIR( mode_t mode ) { return S_ISTYPE( mode, S_IFDIR ); } | |
248 extern (D) bool S_ISFIFO( mode_t mode ) { return S_ISTYPE( mode, S_IFIFO ); } | |
249 extern (D) bool S_ISREG( mode_t mode ) { return S_ISTYPE( mode, S_IFREG ); } | |
250 extern (D) bool S_ISLNK( mode_t mode ) { return S_ISTYPE( mode, S_IFLNK ); } | |
251 extern (D) bool S_ISSOCK( mode_t mode ) { return S_ISTYPE( mode, S_IFSOCK ); } | |
252 } | |
253 else version( freebsd ) | |
254 { | |
255 struct stat_t | |
256 { | |
257 dev_t st_dev; | |
258 ino_t st_ino; | |
259 mode_t st_mode; | |
260 nlink_t st_nlink; | |
261 uid_t st_uid; | |
262 gid_t st_gid; | |
263 dev_t st_rdev; | |
264 | |
265 timespec st_atimespec; | |
266 timespec st_mtimespec; | |
267 timespec st_ctimespec; | |
268 time_t st_atime() | |
269 { | |
270 return st_atimespec.tv_sec; | |
271 } | |
272 time_t st_mtime() | |
273 { | |
274 return st_mtimespec.tv_sec; | |
275 } | |
276 time_t st_ctime() | |
277 { | |
278 return st_ctimespec.tv_sec; | |
279 } | |
280 | |
281 off_t st_size; | |
282 blkcnt_t st_blocks; | |
283 blksize_t st_blksize; | |
284 fflags_t st_flags; | |
285 uint st_gen; | |
286 int st_lspare; | |
287 timespec st_birthtimespec; | |
288 | |
289 byte[16 - timespec.sizeof] padding; | |
290 } | |
291 | |
292 enum S_IRUSR = 0000400; | |
293 enum S_IWUSR = 0000200; | |
294 enum S_IXUSR = 0000100; | |
295 enum S_IRWXU = 0000700; | |
296 | |
297 enum S_IRGRP = 0000040; | |
298 enum S_IWGRP = 0000020; | |
299 enum S_IXGRP = 0000010; | |
300 enum S_IRWXG = 0000070; | |
301 | |
302 enum S_IROTH = 0000004; | |
303 enum S_IWOTH = 0000002; | |
304 enum S_IXOTH = 0000001; | |
305 enum S_IRWXO = 0000007; | |
306 | |
307 enum S_ISUID = 0004000; | |
308 enum S_ISGID = 0002000; | |
309 enum S_ISVTX = 0001000; | |
310 | |
311 private | |
312 { | |
313 extern (D) bool S_ISTYPE( mode_t mode, uint mask ) | |
314 { | |
315 return ( mode & S_IFMT ) == mask; | |
316 } | |
317 } | |
318 | |
319 extern (D) bool S_ISBLK( mode_t mode ) { return S_ISTYPE( mode, S_IFBLK ); } | |
320 extern (D) bool S_ISCHR( mode_t mode ) { return S_ISTYPE( mode, S_IFCHR ); } | |
321 extern (D) bool S_ISDIR( mode_t mode ) { return S_ISTYPE( mode, S_IFDIR ); } | |
322 extern (D) bool S_ISFIFO( mode_t mode ) { return S_ISTYPE( mode, S_IFIFO ); } | |
323 extern (D) bool S_ISREG( mode_t mode ) { return S_ISTYPE( mode, S_IFREG ); } | |
324 extern (D) bool S_ISLNK( mode_t mode ) { return S_ISTYPE( mode, S_IFLNK ); } | |
325 extern (D) bool S_ISSOCK( mode_t mode ) { return S_ISTYPE( mode, S_IFSOCK ); } | |
326 } | |
327 | |
328 int chmod(in char*, mode_t); | |
329 int fchmod(int, mode_t); | |
330 //int fstat(int, stat_t*); | |
331 //int lstat(in char*, stat_t*); | |
332 int mkdir(in char*, mode_t); | |
333 int mkfifo(in char*, mode_t); | |
334 //int stat(in char*, stat_t*); | |
335 mode_t umask(mode_t); | |
336 | |
337 version( linux ) | |
338 { | |
339 static if( __USE_LARGEFILE64 ) | |
340 { | |
341 int fstat64(int, stat_t*); | |
342 alias fstat64 fstat; | |
343 | |
344 int lstat64(in char*, stat_t*); | |
345 alias lstat64 lstat; | |
346 | |
347 int stat64(in char*, stat_t*); | |
348 alias stat64 stat; | |
349 } | |
350 else | |
351 { | |
352 int fstat(int, stat_t*); | |
353 int lstat(in char*, stat_t*); | |
354 int stat(in char*, stat_t*); | |
355 } | |
356 } | |
357 else | |
358 { | |
359 int fstat(int, stat_t*); | |
360 int lstat(in char*, stat_t*); | |
361 int stat(in char*, stat_t*); | |
362 } | |
363 | |
364 // | |
365 // Typed Memory Objects (TYM) | |
366 // | |
367 /* | |
368 S_TYPEISTMO(buf) | |
369 */ | |
370 | |
371 // | |
372 // XOpen (XSI) | |
373 // | |
374 /* | |
375 S_IFMT | |
376 S_IFBLK | |
377 S_IFCHR | |
378 S_IFIFO | |
379 S_IFREG | |
380 S_IFDIR | |
381 S_IFLNK | |
382 S_IFSOCK | |
383 | |
384 int mknod(in 3char*, mode_t, dev_t); | |
385 */ | |
386 | |
387 version( linux ) | |
388 { | |
389 enum S_IFMT = 0170000; | |
390 enum S_IFBLK = 0060000; | |
391 enum S_IFCHR = 0020000; | |
392 enum S_IFIFO = 0010000; | |
393 enum S_IFREG = 0100000; | |
394 enum S_IFDIR = 0040000; | |
395 enum S_IFLNK = 0120000; | |
396 enum S_IFSOCK = 0140000; | |
397 | |
398 int mknod(in char*, mode_t, dev_t); | |
399 } | |
400 else version( OSX ) | |
401 { | |
402 enum S_IFMT = 0170000; | |
403 enum S_IFBLK = 0060000; | |
404 enum S_IFCHR = 0020000; | |
405 enum S_IFIFO = 0010000; | |
406 enum S_IFREG = 0100000; | |
407 enum S_IFDIR = 0040000; | |
408 enum S_IFLNK = 0120000; | |
409 enum S_IFSOCK = 0140000; | |
410 | |
411 int mknod(in char*, mode_t, dev_t); | |
412 } | |
413 else version( freebsd ) | |
414 { | |
415 enum S_IFMT = 0170000; | |
416 enum S_IFBLK = 0060000; | |
417 enum S_IFCHR = 0020000; | |
418 enum S_IFIFO = 0010000; | |
419 enum S_IFREG = 0100000; | |
420 enum S_IFDIR = 0040000; | |
421 enum S_IFLNK = 0120000; | |
422 enum S_IFSOCK = 0140000; | |
423 | |
424 int mknod(in char*, mode_t, dev_t); | |
425 } |