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