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 }