2 * D header file for POSIX.
4 * Copyright: Copyright Sean Kelly 2005 - 2009.
5 * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
6 * Authors: Sean Kelly, Alex Rønne Petersen
7 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
10 /* Copyright Sean Kelly 2005 - 2009.
11 * Distributed under the Boost Software License, Version 1.0.
12 * (See accompanying file LICENSE or copy at
13 * http://www.boost.org/LICENSE_1_0.txt)
15 module core
.sys
.posix
.sys
.stat
;
17 import core
.sys
.posix
.config
;
18 import core
.stdc
.stdint
;
19 import core
.sys
.posix
.time
; // for timespec
20 public import core
.sys
.posix
.sys
.types
; // for off_t, mode_t
28 else version (WatchOS
)
31 version (RISCV32
) version = RISCV_Any
;
32 version (RISCV64
) version = RISCV_Any
;
33 version (SPARC
) version = SPARC_Any
;
34 version (SPARC64
) version = SPARC_Any
;
37 extern (C
) nothrow @nogc:
74 static if (!__USE_FILE_OFFSET64
)
91 static if (_DEFAULT_SOURCE || _XOPEN_SOURCE
>= 700)
96 extern(D
) @safe @property inout pure nothrow
98 ref inout(time_t
) st_atime() return { return st_atim
.tv_sec
; }
99 ref inout(time_t
) st_mtime() return { return st_mtim
.tv_sec
; }
100 ref inout(time_t
) st_ctime() return { return st_ctim
.tv_sec
; }
106 ulong_t st_atimensec
;
108 ulong_t st_mtimensec
;
110 ulong_t st_ctimensec
;
112 static if (__USE_FILE_OFFSET64
)
123 else version (X86_64
)
136 blksize_t st_blksize
;
138 static if (_DEFAULT_SOURCE || _XOPEN_SOURCE
>= 700)
143 extern(D
) @safe @property inout pure nothrow
145 ref inout(time_t
) st_atime() return { return st_atim
.tv_sec
; }
146 ref inout(time_t
) st_mtime() return { return st_mtim
.tv_sec
; }
147 ref inout(time_t
) st_ctime() return { return st_ctim
.tv_sec
; }
153 ulong_t st_atimensec
;
155 ulong_t st_mtimensec
;
157 ulong_t st_ctimensec
;
166 alias __dev_t
= ulong;
167 alias __ino_t
= c_ulong
;
168 alias __ino64_t
= ulong;
169 alias __mode_t
= uint;
170 alias __nlink_t
= size_t
;
171 alias __uid_t
= uint;
172 alias __gid_t
= uint;
173 alias __off_t
= c_long
;
174 alias __off64_t
= long;
175 alias __blksize_t
= c_long
;
176 alias __blkcnt_t
= c_long
;
177 alias __blkcnt64_t
= long;
178 alias __timespec
= timespec
;
179 alias __time_t
= time_t
;
186 static if (!__USE_FILE_OFFSET64
)
201 static if (!__USE_FILE_OFFSET64
)
209 __blksize_t st_blksize
;
211 static if (!__USE_FILE_OFFSET64
)
213 __blkcnt_t st_blocks
;
217 __blkcnt64_t st_blocks
;
220 static if ( _DEFAULT_SOURCE || _XOPEN_SOURCE
>= 700)
225 extern(D
) @safe @property inout pure nothrow
227 ref inout(time_t
) st_atime() return { return st_atim
.tv_sec
; }
228 ref inout(time_t
) st_mtime() return { return st_mtim
.tv_sec
; }
229 ref inout(time_t
) st_ctime() return { return st_ctim
.tv_sec
; }
235 c_ulong st_atimensec
;
237 c_ulong st_mtimensec
;
239 c_ulong st_ctimensec
;
242 static if (!__USE_FILE_OFFSET64
)
252 static if (__USE_FILE_OFFSET64
)
253 static assert(stat_t
.sizeof
== 104);
255 static assert(stat_t
.sizeof
== 88);
257 else version (MIPS_O32
)
269 static if (!__USE_FILE_OFFSET64
)
280 static if (_DEFAULT_SOURCE || _XOPEN_SOURCE
>= 700)
285 extern(D
) @safe @property inout pure nothrow
287 ref inout(time_t
) st_atime() return { return st_atim
.tv_sec
; }
288 ref inout(time_t
) st_mtime() return { return st_mtim
.tv_sec
; }
289 ref inout(time_t
) st_ctime() return { return st_ctim
.tv_sec
; }
295 c_ulong st_atimensec
;
297 c_ulong st_mtimensec
;
299 c_ulong st_ctimensec
;
301 blksize_t st_blksize
;
302 static if (!__USE_FILE_OFFSET64
)
313 static if (!__USE_FILE_OFFSET64
)
314 static assert(stat_t
.sizeof
== 144);
316 static assert(stat_t
.sizeof
== 160);
318 else version (MIPS64
)
330 static if (!__USE_FILE_OFFSET64
)
341 static if (_DEFAULT_SOURCE || _XOPEN_SOURCE
>= 700)
346 extern(D
) @safe @property inout pure nothrow
348 ref inout(time_t
) st_atime() return { return st_atim
.tv_sec
; }
349 ref inout(time_t
) st_mtime() return { return st_mtim
.tv_sec
; }
350 ref inout(time_t
) st_ctime() return { return st_ctim
.tv_sec
; }
356 c_ulong st_atimensec
;
358 c_ulong st_mtimensec
;
360 c_ulong st_ctimensec
;
362 blksize_t st_blksize
;
369 static if (!__USE_FILE_OFFSET64
)
370 static assert(stat_t
.sizeof
== 160);
372 static assert(stat_t
.sizeof
== 176);
374 else version (MIPS_O64
)
376 static if (!__USE_FILE_OFFSET64
)
377 static assert(stat_t
.sizeof
== 160);
379 static assert(stat_t
.sizeof
== 176);
383 static assert(stat_t
.sizeof
== 216);
391 static if (!__USE_FILE_OFFSET64
)
405 blksize_t st_blksize
;
407 static if (_DEFAULT_SOURCE || _XOPEN_SOURCE
>= 700)
412 extern(D
) @safe @property inout pure nothrow
414 ref inout(time_t
) st_atime() return { return st_atim
.tv_sec
; }
415 ref inout(time_t
) st_mtime() return { return st_mtim
.tv_sec
; }
416 ref inout(time_t
) st_ctime() return { return st_ctim
.tv_sec
; }
422 c_ulong st_atimensec
;
424 c_ulong st_mtimensec
;
426 c_ulong st_ctimensec
;
431 static if (__USE_FILE_OFFSET64
)
432 static assert(stat_t
.sizeof
== 104);
434 static assert(stat_t
.sizeof
== 88);
449 blksize_t st_blksize
;
451 static if (_DEFAULT_SOURCE || _XOPEN_SOURCE
>= 700)
456 extern(D
) @safe @property inout pure nothrow
458 ref inout(time_t
) st_atime() return { return st_atim
.tv_sec
; }
459 ref inout(time_t
) st_mtime() return { return st_mtim
.tv_sec
; }
460 ref inout(time_t
) st_ctime() return { return st_ctim
.tv_sec
; }
466 c_ulong st_atimensec
;
468 c_ulong st_mtimensec
;
470 c_ulong st_ctimensec
;
476 static assert(stat_t
.sizeof
== 144);
478 else version (RISCV_Any
)
482 alias __dev_t
= ulong;
483 alias __ino_t
= c_ulong
;
484 alias __ino64_t
= ulong;
485 alias __mode_t
= uint;
486 alias __nlink_t
= uint;
487 alias __uid_t
= uint;
488 alias __gid_t
= uint;
489 alias __off_t
= c_long
;
490 alias __off64_t
= long;
491 alias __blksize_t
= int;
492 alias __blkcnt_t
= c_long
;
493 alias __blkcnt64_t
= long;
494 alias __timespec
= timespec
;
495 alias __time_t
= time_t
;
501 static if (__USE_FILE_OFFSET64
)
516 static if (__USE_FILE_OFFSET64
)
524 __blksize_t st_blksize
;
527 static if (__USE_FILE_OFFSET64
)
529 __blkcnt64_t st_blocks
;
533 __blkcnt_t st_blocks
;
536 static if (_DEFAULT_SOURCE
)
541 extern(D
) @safe @property inout pure nothrow
543 ref inout(time_t
) st_atime() return { return st_atim
.tv_sec
; }
544 ref inout(time_t
) st_mtime() return { return st_mtim
.tv_sec
; }
545 ref inout(time_t
) st_ctime() return { return st_ctim
.tv_sec
; }
551 c_ulong st_atimensec
;
553 c_ulong st_mtimensec
;
555 c_ulong st_ctimensec
;
564 alias __dev_t
= ulong;
565 alias __ino_t
= c_ulong
;
566 alias __ino64_t
= ulong;
567 alias __mode_t
= uint;
568 alias __nlink_t
= size_t
;
569 alias __uid_t
= uint;
570 alias __gid_t
= uint;
571 alias __off_t
= c_long
;
572 alias __off64_t
= long;
573 alias __blksize_t
= c_long
;
574 alias __blkcnt_t
= c_long
;
575 alias __blkcnt64_t
= long;
576 alias __timespec
= timespec
;
577 alias __time_t
= time_t
;
584 static if (!__USE_FILE_OFFSET64
)
599 static if (!__USE_FILE_OFFSET64
)
607 __blksize_t st_blksize
;
609 static if (!__USE_FILE_OFFSET64
)
611 __blkcnt_t st_blocks
;
615 __blkcnt64_t st_blocks
;
618 static if ( _DEFAULT_SOURCE || _XOPEN_SOURCE
>= 700)
623 extern(D
) @safe @property inout pure nothrow
625 ref inout(time_t
) st_atime() return { return st_atim
.tv_sec
; }
626 ref inout(time_t
) st_mtime() return { return st_mtim
.tv_sec
; }
627 ref inout(time_t
) st_ctime() return { return st_ctim
.tv_sec
; }
633 c_ulong st_atimensec
;
635 c_ulong st_mtimensec
;
637 c_ulong st_ctimensec
;
640 static if (!__USE_FILE_OFFSET64
)
650 static if (__USE_FILE_OFFSET64
)
651 static assert(stat_t
.sizeof
== 104);
653 static assert(stat_t
.sizeof
== 88);
655 else version (AArch64
)
659 alias __dev_t
= ulong;
660 alias __ino_t
= c_ulong
;
661 alias __ino64_t
= ulong;
662 alias __mode_t
= uint;
663 alias __nlink_t
= uint;
664 alias __uid_t
= uint;
665 alias __gid_t
= uint;
666 alias __off_t
= c_long
;
667 alias __off64_t
= long;
668 alias __blksize_t
= int;
669 alias __blkcnt_t
= c_long
;
670 alias __blkcnt64_t
= long;
671 alias __timespec
= timespec
;
672 alias __time_t
= time_t
;
678 static if (!__USE_FILE_OFFSET64
)
693 static if (!__USE_FILE_OFFSET64
)
701 __blksize_t st_blksize
;
704 static if (!__USE_FILE_OFFSET64
)
706 __blkcnt_t st_blocks
;
710 __blkcnt64_t st_blocks
;
713 static if (_DEFAULT_SOURCE
)
718 extern(D
) @safe @property inout pure nothrow
720 ref inout(time_t
) st_atime() return { return st_atim
.tv_sec
; }
721 ref inout(time_t
) st_mtime() return { return st_mtim
.tv_sec
; }
722 ref inout(time_t
) st_ctime() return { return st_ctim
.tv_sec
; }
728 c_ulong st_atimensec
;
730 c_ulong st_mtimensec
;
732 c_ulong st_ctimensec
;
737 static assert(stat_t
.sizeof
== 128);
739 static assert(stat_t
.sizeof
== 104);
741 else version (SPARC_Any
)
745 alias __dev_t
= ulong;
746 alias __ino_t
= c_ulong
;
747 alias __ino64_t
= ulong;
748 alias __mode_t
= uint;
749 alias __nlink_t
= uint;
750 alias __uid_t
= uint;
751 alias __gid_t
= uint;
752 alias __off_t
= c_long
;
753 alias __off64_t
= long;
754 alias __blksize_t
= c_long
;
755 alias __blkcnt_t
= c_long
;
756 alias __blkcnt64_t
= long;
757 alias __timespec
= timespec
;
758 alias __time_t
= time_t
;
763 static if (__WORDSIZE
== 64 ||
!__USE_FILE_OFFSET64
)
779 static if (!__USE_FILE_OFFSET64
)
787 __blksize_t st_blksize
;
789 static if (!__USE_FILE_OFFSET64
)
791 __blkcnt_t st_blocks
;
795 __blkcnt64_t st_blocks
;
798 static if (_XOPEN_SOURCE
>= 700)
803 extern(D
) @safe @property inout pure nothrow
805 ref inout(time_t
) st_atime() return { return st_atim
.tv_sec
; }
806 ref inout(time_t
) st_mtime() return { return st_mtim
.tv_sec
; }
807 ref inout(time_t
) st_ctime() return { return st_ctim
.tv_sec
; }
813 c_ulong st_atimensec
;
815 c_ulong st_mtimensec
;
817 c_ulong st_ctimensec
;
823 static if (__USE_LARGEFILE64
) alias stat_t stat64_t
;
825 static if (__WORDSIZE
== 64)
826 static assert(stat_t
.sizeof
== 144);
827 else static if (__USE_FILE_OFFSET64
)
828 static assert(stat_t
.sizeof
== 104);
830 static assert(stat_t
.sizeof
== 88);
837 alias __dev_t
= ulong;
838 alias __ino_t
= c_ulong
;
839 alias __ino64_t
= ulong;
840 alias __mode_t
= uint;
841 alias __nlink_t
= uint;
842 alias __uid_t
= uint;
843 alias __gid_t
= uint;
844 alias __off_t
= c_long
;
845 alias __off64_t
= long;
846 alias __blksize_t
= c_long
;
847 alias __blkcnt_t
= c_long
;
848 alias __blkcnt64_t
= long;
849 alias __timespec
= timespec
;
850 alias __time_t
= time_t
;
856 static if (!__USE_FILE_OFFSET64
)
866 static if (!__USE_FILE_OFFSET64
)
870 __blksize_t st_blksize
;
871 static if (!__USE_FILE_OFFSET64
)
872 __blkcnt_t st_blocks
;
874 __blkcnt64_t st_blocks
;
875 static if (_XOPEN_SOURCE
>= 700)
880 extern(D
) @safe @property inout pure nothrow
882 ref inout(time_t
) st_atime() return { return st_atim
.tv_sec
; }
883 ref inout(time_t
) st_mtime() return { return st_mtim
.tv_sec
; }
884 ref inout(time_t
) st_ctime() return { return st_ctim
.tv_sec
; }
890 c_ulong st_atimensec
;
892 c_ulong st_mtimensec
;
894 c_ulong st_ctimensec
;
896 static if (!__USE_FILE_OFFSET64
)
898 c_ulong __glibc_reserved4
;
899 c_ulong __glibc_reserved5
;
904 static if (__USE_FILE_OFFSET64
)
905 static assert(stat_t
.sizeof
== 104);
907 static assert(stat_t
.sizeof
== 88);
909 else version (SystemZ
)
913 alias __dev_t
= ulong;
914 alias __ino_t
= c_ulong
;
915 alias __ino64_t
= ulong;
916 alias __mode_t
= uint;
917 alias __nlink_t
= ulong;
918 alias __uid_t
= uint;
919 alias __gid_t
= uint;
920 alias __off_t
= c_long
;
921 alias __off64_t
= long;
922 alias __blksize_t
= c_long
;
923 alias __blkcnt_t
= c_long
;
924 alias __blkcnt64_t
= long;
925 alias __timespec
= timespec
;
926 alias __time_t
= time_t
;
936 int __glibc_reserved0
;
939 static if (_XOPEN_SOURCE
>= 700)
944 extern(D
) @safe @property inout pure nothrow
946 ref inout(time_t
) st_atime() return { return st_atim
.tv_sec
; }
947 ref inout(time_t
) st_mtime() return { return st_mtim
.tv_sec
; }
948 ref inout(time_t
) st_ctime() return { return st_ctim
.tv_sec
; }
954 c_ulong st_atimensec
;
956 c_ulong st_mtimensec
;
958 c_ulong st_ctimensec
;
960 __blksize_t st_blksize
;
961 __blkcnt_t st_blocks
;
962 c_long
[3] __glibc_reserved
;
964 static if (_XOPEN_SOURCE
>= 700)
965 static assert(stat_t
.sizeof
== 144);
967 static assert(stat_t
.sizeof
== 144);
969 else version (LoongArch64
)
973 alias __dev_t
= ulong;
974 alias __ino_t
= c_ulong
;
975 alias __ino64_t
= ulong;
976 alias __mode_t
= uint;
977 alias __nlink_t
= uint;
978 alias __uid_t
= uint;
979 alias __gid_t
= uint;
980 alias __off_t
= c_long
;
981 alias __off64_t
= long;
982 alias __blksize_t
= int;
983 alias __blkcnt_t
= c_long
;
984 alias __blkcnt64_t
= long;
985 alias __timespec
= timespec
;
986 alias __time_t
= time_t
;
998 // la64 always uses 64-bit file offsets
1000 __blksize_t st_blksize
;
1002 // la64 always uses 64-bit block counts
1003 __blkcnt64_t st_blocks
;
1004 static if (_XOPEN_SOURCE
>= 700)
1009 extern(D
) @safe @property inout pure nothrow
1011 ref inout(time_t
) st_atime() return { return st_atim
.tv_sec
; }
1012 ref inout(time_t
) st_mtime() return { return st_mtim
.tv_sec
; }
1013 ref inout(time_t
) st_ctime() return { return st_ctim
.tv_sec
; }
1019 c_ulong st_atimensec
;
1021 c_ulong st_mtimensec
;
1023 c_ulong st_ctimensec
;
1025 int[2] __glibc_reserved
;
1027 static assert(stat_t
.sizeof
== 128);
1030 static assert(0, "unimplemented");
1032 enum S_ISUID
= 0x800; // octal 04000
1033 enum S_ISGID
= 0x400; // octal 02000
1034 enum S_ISVTX
= 0x200; // octal 01000
1036 static if ( true /*__USE_POSIX199309*/ )
1038 extern bool S_TYPEISMQ( stat_t
* buf
) { return false; }
1039 extern bool S_TYPEISSEM( stat_t
* buf
) { return false; }
1040 extern bool S_TYPEISSHM( stat_t
* buf
) { return false; }
1043 enum UTIME_NOW
= 0x3fffffff;
1044 enum UTIME_OMIT
= 0x3ffffffe;
1046 else version (Darwin
)
1048 // _DARWIN_FEATURE_64_BIT_INODE stat is default for Mac OSX >10.5 and is
1049 // only meaningful type for other OS X/Darwin variants (e.g. iOS).
1050 // man stat(2) gives details.
1064 timespec st_atimespec
;
1065 timespec st_mtimespec
;
1066 timespec st_ctimespec
;
1067 timespec st_birthtimespec
;
1072 c_long st_atimensec
;
1074 c_long st_mtimensec
;
1076 c_long st_ctimensec
;
1077 time_t st_birthtime
;
1078 c_long st_birthtimensec
;
1083 blksize_t st_blksize
;
1090 enum S_ISUID
= 0x800; // octal 04000
1091 enum S_ISGID
= 0x400; // octal 02000
1092 enum S_ISVTX
= 0x200; // octal 01000
1094 else version (FreeBSD
)
1096 import core
.sys
.freebsd
.config
;
1098 // https://github.com/freebsd/freebsd/blob/master/sys/sys/stat.h
1099 static if (__FreeBSD_version
>= INO64_FIRST
)
1113 version (X86
) int st_atim_ext
;
1116 version (X86
) int st_mtim_ext
;
1119 version (X86
) int st_ctim_ext
;
1122 version (X86
) int st_btim_ext
;
1123 timespec st_birthtim
;
1127 blksize_t st_blksize
;
1132 extern(D
) @safe @property inout pure nothrow
1134 ref inout(time_t
) st_atime() return { return st_atim
.tv_sec
; }
1135 ref inout(time_t
) st_mtime() return { return st_mtim
.tv_sec
; }
1136 ref inout(time_t
) st_ctime() return { return st_ctim
.tv_sec
; }
1137 ref inout(time_t
) st_birthtime() return { return st_birthtim
.tv_sec
; }
1157 blksize_t st_blksize
;
1161 timespec st_birthtim
;
1162 ubyte[16 - timespec
.sizeof
] padding
;
1164 extern(D
) @safe @property inout pure nothrow
1166 ref inout(time_t
) st_atime() return { return st_atim
.tv_sec
; }
1167 ref inout(time_t
) st_mtime() return { return st_mtim
.tv_sec
; }
1168 ref inout(time_t
) st_ctime() return { return st_ctim
.tv_sec
; }
1169 ref inout(time_t
) st_birthtime() return { return st_birthtim
.tv_sec
; }
1174 enum S_ISUID
= 0x800; // octal 0004000
1175 enum S_ISGID
= 0x400; // octal 0002000
1176 enum S_ISVTX
= 0x200; // octal 0001000
1178 enum UTIME_NOW
= -1;
1179 enum UTIME_OMIT
= -2;
1181 else version (NetBSD
)
1185 dev_t st_dev
; /* inode's device */
1186 mode_t st_mode
; /* inode protection mode */
1187 ino_t st_ino
; /* inode's number */
1188 nlink_t st_nlink
; /* number of hard links */
1189 uid_t st_uid
; /* user ID of the file's owner */
1190 gid_t st_gid
; /* group ID of the file's group */
1191 dev_t st_rdev
; /* device type */
1192 time_t st_atime
; /* time of last access */
1193 long st_atimensec
; /* nsec of last access */
1194 time_t st_mtime
; /* time of last data modification */
1195 long st_mtimensec
; /* nsec of last data modification */
1196 time_t st_ctime
; /* time of last file status change */
1197 long st_ctimensec
; /* nsec of last file status change */
1198 time_t st_birthtime
; /* time of creation */
1199 long st_birthtimensec
; /* nsec of time of creation */
1200 off_t st_size
; /* file size, in bytes */
1201 blkcnt_t st_blocks
; /* blocks allocated for file */
1202 blksize_t st_blksize
; /* optimal blocksize for I/O */
1203 uint32_t st_flags
; /* user defined flags for file */
1204 uint32_t st_gen
; /* file generation number */
1205 uint32_t
[2] st_spare
;
1208 enum S_ISUID
= 0x800; // octal 0004000
1209 enum S_ISGID
= 0x400; // octal 0002000
1210 enum S_ISVTX
= 0x200; // octal 0001000
1212 else version (OpenBSD
)
1214 import core
.sys
.openbsd
.sys
.cdefs
;
1225 static if (__POSIX_VISIBLE
>= 200809 || __BSD_VISIBLE
)
1230 extern(D
) @safe @property inout pure nothrow
1232 ref inout(time_t
) st_atime() return { return st_atim
.tv_sec
; }
1233 ref inout(time_t
) st_mtime() return { return st_mtim
.tv_sec
; }
1234 ref inout(time_t
) st_ctime() return { return st_ctim
.tv_sec
; }
1248 blksize_t st_blksize
;
1251 static if (__POSIX_VISIBLE
>= 200809 || __BSD_VISIBLE
)
1253 timespec __st_birthtim
;
1257 time_t __st_birthtime
;
1258 long __st_birthtimensec
;
1262 enum S_ISUID
= 0x800; // octal 0004000
1263 enum S_ISGID
= 0x400; // octal 0002000
1264 enum S_ISVTX
= 0x200; // octal 0001000
1266 else version (DragonFlyBSD
)
1269 ino_t st_ino
; /* inode's number */
1270 nlink_t st_nlink
; /* number of hard links */
1271 dev_t st_dev
; /* inode's device */
1272 mode_t st_mode
; /* inode protection mode */
1273 uint16_t st_padding1
;
1274 uid_t st_uid
; /* user ID of the file's owner */
1275 gid_t st_gid
; /* group ID of the file's group */
1276 dev_t st_rdev
; /* device type */
1278 c_long __st_atimensec
;
1280 c_long __st_mtimensec
;
1282 c_long __st_ctimensec
;
1283 off_t st_size
; /* file size, in bytes */
1284 int64_t st_blocks
; /* blocks allocated for file */
1285 uint32_t st_blksize
; /* optimal blocksize for I/O */
1286 uint32_t st_flags
; /* user defined flags for file */
1287 uint32_t st_gen
; /* file generation number */
1289 int64_t st_qspare1
; /* was recursive change detect */
1293 enum S_ISUID
= 0x800; // octal 0004000
1294 enum S_ISGID
= 0x400; // octal 0002000
1295 enum S_ISVTX
= 0x200; // octal 0001000
1297 else version (Solaris
)
1299 private enum _ST_FSTYPSZ
= 16;
1315 timestruc_t st_atim
;
1320 timestruc_t st_mtim
;
1325 timestruc_t st_ctim
;
1328 blksize_t st_blksize
;
1330 char[_ST_FSTYPSZ
] st_fstype
= 0;
1333 static if (__USE_LARGEFILE64
) alias stat_t stat64_t
;
1352 timestruc_t st_atim
;
1357 timestruc_t st_mtim
;
1362 timestruc_t st_ctim
;
1365 blksize_t st_blksize
;
1367 char[_ST_FSTYPSZ
] st_fstype
= 0;
1385 timestruc_t st_atim
;
1390 timestruc_t st_mtim
;
1395 timestruc_t st_ctim
;
1398 blksize_t st_blksize
;
1399 blkcnt64_t st_blocks
;
1400 char[_ST_FSTYPSZ
] st_fstype
= 0;
1404 static if (__USE_FILE_OFFSET64
)
1405 alias stat64_t stat_t
;
1407 alias stat32_t stat_t
;
1411 enum S_ISUID
= 0x800;
1412 enum S_ISGID
= 0x400;
1413 enum S_ISVTX
= 0x200;
1417 static assert(false, "Unsupported platform");
1443 version (CRuntime_Glibc
)
1445 enum S_IRUSR
= 0x100; // octal 0400
1446 enum S_IWUSR
= 0x080; // octal 0200
1447 enum S_IXUSR
= 0x040; // octal 0100
1448 enum S_IRWXU
= S_IRUSR | S_IWUSR | S_IXUSR
;
1450 enum S_IRGRP
= S_IRUSR
>> 3;
1451 enum S_IWGRP
= S_IWUSR
>> 3;
1452 enum S_IXGRP
= S_IXUSR
>> 3;
1453 enum S_IRWXG
= S_IRWXU
>> 3;
1455 enum S_IROTH
= S_IRGRP
>> 3;
1456 enum S_IWOTH
= S_IWGRP
>> 3;
1457 enum S_IXOTH
= S_IXGRP
>> 3;
1458 enum S_IRWXO
= S_IRWXG
>> 3;
1462 extern (D
) bool S_ISTYPE( mode_t mode
, uint mask
)
1464 return ( mode
& S_IFMT
) == mask
;
1468 extern (D
) bool S_ISBLK( mode_t mode
) { return S_ISTYPE( mode
, S_IFBLK
); }
1469 extern (D
) bool S_ISCHR( mode_t mode
) { return S_ISTYPE( mode
, S_IFCHR
); }
1470 extern (D
) bool S_ISDIR( mode_t mode
) { return S_ISTYPE( mode
, S_IFDIR
); }
1471 extern (D
) bool S_ISFIFO( mode_t mode
) { return S_ISTYPE( mode
, S_IFIFO
); }
1472 extern (D
) bool S_ISREG( mode_t mode
) { return S_ISTYPE( mode
, S_IFREG
); }
1473 extern (D
) bool S_ISLNK( mode_t mode
) { return S_ISTYPE( mode
, S_IFLNK
); }
1474 extern (D
) bool S_ISSOCK( mode_t mode
) { return S_ISTYPE( mode
, S_IFSOCK
); }
1476 int utimensat(int dirfd
, const char *pathname
,
1477 ref const(timespec
)[2] times
, int flags
);
1478 int futimens(int fd
, ref const(timespec
)[2] times
);
1480 else version (Darwin
)
1482 enum S_IRUSR
= 0x100; // octal 0400
1483 enum S_IWUSR
= 0x080; // octal 0200
1484 enum S_IXUSR
= 0x040; // octal 0100
1485 enum S_IRWXU
= S_IRUSR | S_IWUSR | S_IXUSR
;
1487 enum S_IRGRP
= S_IRUSR
>> 3;
1488 enum S_IWGRP
= S_IWUSR
>> 3;
1489 enum S_IXGRP
= S_IXUSR
>> 3;
1490 enum S_IRWXG
= S_IRWXU
>> 3;
1492 enum S_IROTH
= S_IRGRP
>> 3;
1493 enum S_IWOTH
= S_IWGRP
>> 3;
1494 enum S_IXOTH
= S_IXGRP
>> 3;
1495 enum S_IRWXO
= S_IRWXG
>> 3;
1499 extern (D
) bool S_ISTYPE( mode_t mode
, uint mask
)
1501 return ( mode
& S_IFMT
) == mask
;
1505 extern (D
) bool S_ISBLK( mode_t mode
) { return S_ISTYPE( mode
, S_IFBLK
); }
1506 extern (D
) bool S_ISCHR( mode_t mode
) { return S_ISTYPE( mode
, S_IFCHR
); }
1507 extern (D
) bool S_ISDIR( mode_t mode
) { return S_ISTYPE( mode
, S_IFDIR
); }
1508 extern (D
) bool S_ISFIFO( mode_t mode
) { return S_ISTYPE( mode
, S_IFIFO
); }
1509 extern (D
) bool S_ISREG( mode_t mode
) { return S_ISTYPE( mode
, S_IFREG
); }
1510 extern (D
) bool S_ISLNK( mode_t mode
) { return S_ISTYPE( mode
, S_IFLNK
); }
1511 extern (D
) bool S_ISSOCK( mode_t mode
) { return S_ISTYPE( mode
, S_IFSOCK
); }
1513 else version (FreeBSD
)
1515 enum S_IRUSR
= 0x100; // octal 0000400
1516 enum S_IWUSR
= 0x080; // octal 0000200
1517 enum S_IXUSR
= 0x040; // octal 0000100
1518 enum S_IRWXU
= 0x1C0; // octal 0000700
1520 enum S_IRGRP
= 0x020; // octal 0000040
1521 enum S_IWGRP
= 0x010; // octal 0000020
1522 enum S_IXGRP
= 0x008; // octal 0000010
1523 enum S_IRWXG
= 0x038; // octal 0000070
1525 enum S_IROTH
= 0x4; // 0000004
1526 enum S_IWOTH
= 0x2; // 0000002
1527 enum S_IXOTH
= 0x1; // 0000001
1528 enum S_IRWXO
= 0x7; // 0000007
1532 extern (D
) bool S_ISTYPE( mode_t mode
, uint mask
)
1534 return ( mode
& S_IFMT
) == mask
;
1538 extern (D
) bool S_ISBLK( mode_t mode
) { return S_ISTYPE( mode
, S_IFBLK
); }
1539 extern (D
) bool S_ISCHR( mode_t mode
) { return S_ISTYPE( mode
, S_IFCHR
); }
1540 extern (D
) bool S_ISDIR( mode_t mode
) { return S_ISTYPE( mode
, S_IFDIR
); }
1541 extern (D
) bool S_ISFIFO( mode_t mode
) { return S_ISTYPE( mode
, S_IFIFO
); }
1542 extern (D
) bool S_ISREG( mode_t mode
) { return S_ISTYPE( mode
, S_IFREG
); }
1543 extern (D
) bool S_ISLNK( mode_t mode
) { return S_ISTYPE( mode
, S_IFLNK
); }
1544 extern (D
) bool S_ISSOCK( mode_t mode
) { return S_ISTYPE( mode
, S_IFSOCK
); }
1546 // Since FreeBSD 11:
1549 int utimensat(int dirfd
, const char *pathname
,
1550 ref const(timespec
)[2] times
, int flags
);
1551 int futimens(int fd
, ref const(timespec
)[2] times
);
1554 else version (NetBSD
)
1556 enum S_IRUSR
= 0x100; // octal 0000400
1557 enum S_IWUSR
= 0x080; // octal 0000200
1558 enum S_IXUSR
= 0x040; // octal 0000100
1559 enum S_IRWXU
= 0x1C0; // octal 0000700
1561 enum S_IRGRP
= 0x020; // octal 0000040
1562 enum S_IWGRP
= 0x010; // octal 0000020
1563 enum S_IXGRP
= 0x008; // octal 0000010
1564 enum S_IRWXG
= 0x038; // octal 0000070
1566 enum S_IROTH
= 0x4; // 0000004
1567 enum S_IWOTH
= 0x2; // 0000002
1568 enum S_IXOTH
= 0x1; // 0000001
1569 enum S_IRWXO
= 0x7; // 0000007
1573 extern (D
) bool S_ISTYPE( mode_t mode
, uint mask
)
1575 return ( mode
& S_IFMT
) == mask
;
1579 extern (D
) bool S_ISBLK( mode_t mode
) { return S_ISTYPE( mode
, S_IFBLK
); }
1580 extern (D
) bool S_ISCHR( mode_t mode
) { return S_ISTYPE( mode
, S_IFCHR
); }
1581 extern (D
) bool S_ISDIR( mode_t mode
) { return S_ISTYPE( mode
, S_IFDIR
); }
1582 extern (D
) bool S_ISFIFO( mode_t mode
) { return S_ISTYPE( mode
, S_IFIFO
); }
1583 extern (D
) bool S_ISREG( mode_t mode
) { return S_ISTYPE( mode
, S_IFREG
); }
1584 extern (D
) bool S_ISLNK( mode_t mode
) { return S_ISTYPE( mode
, S_IFLNK
); }
1585 extern (D
) bool S_ISSOCK( mode_t mode
) { return S_ISTYPE( mode
, S_IFSOCK
); }
1587 else version (OpenBSD
)
1589 enum S_IRUSR
= 0x100; // octal 0000400
1590 enum S_IWUSR
= 0x080; // octal 0000200
1591 enum S_IXUSR
= 0x040; // octal 0000100
1592 enum S_IRWXU
= 0x1C0; // octal 0000700
1594 enum S_IRGRP
= 0x020; // octal 0000040
1595 enum S_IWGRP
= 0x010; // octal 0000020
1596 enum S_IXGRP
= 0x008; // octal 0000010
1597 enum S_IRWXG
= 0x038; // octal 0000070
1599 enum S_IROTH
= 0x4; // 0000004
1600 enum S_IWOTH
= 0x2; // 0000002
1601 enum S_IXOTH
= 0x1; // 0000001
1602 enum S_IRWXO
= 0x7; // 0000007
1604 extern (D
) bool S_ISBLK(mode_t mode
) { return (mode
& S_IFMT
) == S_IFBLK
; }
1605 extern (D
) bool S_ISCHR(mode_t mode
) { return (mode
& S_IFMT
) == S_IFCHR
; }
1606 extern (D
) bool S_ISDIR(mode_t mode
) { return (mode
& S_IFMT
) == S_IFDIR
; }
1607 extern (D
) bool S_ISFIFO(mode_t mode
) { return (mode
& S_IFMT
) == S_IFIFO
; }
1608 extern (D
) bool S_ISREG(mode_t mode
) { return (mode
& S_IFMT
) == S_IFREG
; }
1609 extern (D
) bool S_ISLNK(mode_t mode
) { return (mode
& S_IFMT
) == S_IFLNK
; }
1610 extern (D
) bool S_ISSOCK(mode_t mode
) { return (mode
& S_IFMT
) == S_IFSOCK
; }
1612 else version (DragonFlyBSD
)
1614 enum S_IRUSR
= 0x100; // octal 0000400
1615 enum S_IWUSR
= 0x080; // octal 0000200
1616 enum S_IXUSR
= 0x040; // octal 0000100
1617 enum S_IRWXU
= 0x1C0; // octal 0000700
1619 enum S_IRGRP
= 0x020; // octal 0000040
1620 enum S_IWGRP
= 0x010; // octal 0000020
1621 enum S_IXGRP
= 0x008; // octal 0000010
1622 enum S_IRWXG
= 0x038; // octal 0000070
1624 enum S_IROTH
= 0x4; // 0000004
1625 enum S_IWOTH
= 0x2; // 0000002
1626 enum S_IXOTH
= 0x1; // 0000001
1627 enum S_IRWXO
= 0x7; // 0000007
1631 extern (D
) bool S_ISTYPE( mode_t mode
, uint mask
)
1633 return ( mode
& S_IFMT
) == mask
;
1637 extern (D
) bool S_ISBLK( mode_t mode
) { return S_ISTYPE( mode
, S_IFBLK
); }
1638 extern (D
) bool S_ISCHR( mode_t mode
) { return S_ISTYPE( mode
, S_IFCHR
); }
1639 extern (D
) bool S_ISDIR( mode_t mode
) { return S_ISTYPE( mode
, S_IFDIR
); }
1640 extern (D
) bool S_ISFIFO( mode_t mode
) { return S_ISTYPE( mode
, S_IFIFO
); }
1641 extern (D
) bool S_ISREG( mode_t mode
) { return S_ISTYPE( mode
, S_IFREG
); }
1642 extern (D
) bool S_ISLNK( mode_t mode
) { return S_ISTYPE( mode
, S_IFLNK
); }
1643 extern (D
) bool S_ISSOCK( mode_t mode
) { return S_ISTYPE( mode
, S_IFSOCK
); }
1645 else version (Solaris
)
1647 enum S_IRUSR
= 0x100;
1648 enum S_IWUSR
= 0x080;
1649 enum S_IXUSR
= 0x040;
1650 enum S_IRWXU
= 0x1C0;
1652 enum S_IRGRP
= 0x020;
1653 enum S_IWGRP
= 0x010;
1654 enum S_IXGRP
= 0x008;
1655 enum S_IRWXG
= 0x038;
1657 enum S_IROTH
= 0x4; // 0000004
1658 enum S_IWOTH
= 0x2; // 0000002
1659 enum S_IXOTH
= 0x1; // 0000001
1660 enum S_IRWXO
= 0x7; // 0000007
1664 extern (D
) bool S_ISTYPE(mode_t mode
, uint mask
)
1666 return (mode
& S_IFMT
) == mask
;
1670 extern (D
) bool S_ISBLK(mode_t mode
) { return S_ISTYPE(mode
, S_IFBLK
); }
1671 extern (D
) bool S_ISCHR(mode_t mode
) { return S_ISTYPE(mode
, S_IFCHR
); }
1672 extern (D
) bool S_ISDIR(mode_t mode
) { return S_ISTYPE(mode
, S_IFDIR
); }
1673 extern (D
) bool S_ISFIFO(mode_t mode
) { return S_ISTYPE(mode
, S_IFIFO
); }
1674 extern (D
) bool S_ISREG(mode_t mode
) { return S_ISTYPE(mode
, S_IFREG
); }
1675 extern (D
) bool S_ISLNK(mode_t mode
) { return S_ISTYPE(mode
, S_IFLNK
); }
1676 extern (D
) bool S_ISSOCK(mode_t mode
) { return S_ISTYPE(mode
, S_IFSOCK
); }
1677 extern (D
) bool S_ISDOOR(mode_t mode
) { return S_ISTYPE(mode
, S_IFDOOR
); }
1678 extern (D
) bool S_ISPORT(mode_t mode
) { return S_ISTYPE(mode
, S_IFPORT
); }
1680 else version (CRuntime_Bionic
)
1682 enum S_IRUSR
= 0x100; // octal 0000400
1683 enum S_IWUSR
= 0x080; // octal 0000200
1684 enum S_IXUSR
= 0x040; // octal 0000100
1685 enum S_IRWXU
= 0x1C0; // octal 0000700
1687 enum S_IRGRP
= 0x020; // octal 0000040
1688 enum S_IWGRP
= 0x010; // octal 0000020
1689 enum S_IXGRP
= 0x008; // octal 0000010
1690 enum S_IRWXG
= 0x038; // octal 0000070
1692 enum S_IROTH
= 0x4; // 0000004
1693 enum S_IWOTH
= 0x2; // 0000002
1694 enum S_IXOTH
= 0x1; // 0000001
1695 enum S_IRWXO
= 0x7; // 0000007
1699 extern (D
) bool S_ISTYPE( uint mode
, uint mask
)
1701 return ( mode
& S_IFMT
) == mask
;
1705 extern (D
) bool S_ISBLK( uint mode
) { return S_ISTYPE( mode
, S_IFBLK
); }
1706 extern (D
) bool S_ISCHR( uint mode
) { return S_ISTYPE( mode
, S_IFCHR
); }
1707 extern (D
) bool S_ISDIR( uint mode
) { return S_ISTYPE( mode
, S_IFDIR
); }
1708 extern (D
) bool S_ISFIFO( uint mode
) { return S_ISTYPE( mode
, S_IFIFO
); }
1709 extern (D
) bool S_ISREG( uint mode
) { return S_ISTYPE( mode
, S_IFREG
); }
1710 extern (D
) bool S_ISLNK( uint mode
) { return S_ISTYPE( mode
, S_IFLNK
); }
1711 extern (D
) bool S_ISSOCK( uint mode
) { return S_ISTYPE( mode
, S_IFSOCK
); }
1713 // Added since Lollipop
1714 int utimensat(int dirfd
, const char *pathname
,
1715 ref const(timespec
)[2] times
, int flags
);
1717 else version (CRuntime_Musl
)
1720 S_IRUSR
= 0x100, // octal 0400
1721 S_IWUSR
= 0x080, // octal 0200
1722 S_IXUSR
= 0x040, // octal 0100
1723 S_IRWXU
= S_IRUSR | S_IWUSR | S_IXUSR
,
1725 S_IRGRP
= S_IRUSR
>> 3,
1726 S_IWGRP
= S_IWUSR
>> 3,
1727 S_IXGRP
= S_IXUSR
>> 3,
1728 S_IRWXG
= S_IRWXU
>> 3,
1730 S_IROTH
= S_IRGRP
>> 3,
1731 S_IWOTH
= S_IWGRP
>> 3,
1732 S_IXOTH
= S_IXGRP
>> 3,
1733 S_IRWXO
= S_IRWXG
>> 3,
1738 extern (D
) bool S_ISTYPE( mode_t mode
, uint mask
)
1740 return ( mode
& S_IFMT
) == mask
;
1744 extern (D
) bool S_ISBLK( mode_t mode
) { return S_ISTYPE( mode
, S_IFBLK
); }
1745 extern (D
) bool S_ISCHR( mode_t mode
) { return S_ISTYPE( mode
, S_IFCHR
); }
1746 extern (D
) bool S_ISDIR( mode_t mode
) { return S_ISTYPE( mode
, S_IFDIR
); }
1747 extern (D
) bool S_ISFIFO( mode_t mode
) { return S_ISTYPE( mode
, S_IFIFO
); }
1748 extern (D
) bool S_ISREG( mode_t mode
) { return S_ISTYPE( mode
, S_IFREG
); }
1749 extern (D
) bool S_ISLNK( mode_t mode
) { return S_ISTYPE( mode
, S_IFLNK
); }
1750 extern (D
) bool S_ISSOCK( mode_t mode
) { return S_ISTYPE( mode
, S_IFSOCK
); }
1752 int utimensat(int dirfd
, const char *pathname
,
1753 ref const(timespec
)[2] times
, int flags
);
1755 else version (CRuntime_UClibc
)
1757 enum S_IRUSR
= 0x100; // octal 0400
1758 enum S_IWUSR
= 0x080; // octal 0200
1759 enum S_IXUSR
= 0x040; // octal 0100
1760 enum S_IRWXU
= S_IRUSR | S_IWUSR | S_IXUSR
;
1762 enum S_IRGRP
= S_IRUSR
>> 3;
1763 enum S_IWGRP
= S_IWUSR
>> 3;
1764 enum S_IXGRP
= S_IXUSR
>> 3;
1765 enum S_IRWXG
= S_IRWXU
>> 3;
1767 enum S_IROTH
= S_IRGRP
>> 3;
1768 enum S_IWOTH
= S_IWGRP
>> 3;
1769 enum S_IXOTH
= S_IXGRP
>> 3;
1770 enum S_IRWXO
= S_IRWXG
>> 3;
1774 extern (D
) bool S_ISTYPE( mode_t mode
, uint mask
)
1776 return ( mode
& S_IFMT
) == mask
;
1780 extern (D
) bool S_ISBLK( mode_t mode
) { return S_ISTYPE( mode
, S_IFBLK
); }
1781 extern (D
) bool S_ISCHR( mode_t mode
) { return S_ISTYPE( mode
, S_IFCHR
); }
1782 extern (D
) bool S_ISDIR( mode_t mode
) { return S_ISTYPE( mode
, S_IFDIR
); }
1783 extern (D
) bool S_ISFIFO( mode_t mode
) { return S_ISTYPE( mode
, S_IFIFO
); }
1784 extern (D
) bool S_ISREG( mode_t mode
) { return S_ISTYPE( mode
, S_IFREG
); }
1785 extern (D
) bool S_ISLNK( mode_t mode
) { return S_ISTYPE( mode
, S_IFLNK
); }
1786 extern (D
) bool S_ISSOCK( mode_t mode
) { return S_ISTYPE( mode
, S_IFSOCK
); }
1788 int utimensat(int dirfd
, const char *pathname
,
1789 ref const(timespec
)[2] times
, int flags
);
1790 int futimens(int fd
, ref const(timespec
)[2] times
);
1794 static assert(false, "Unsupported platform");
1798 int chmod(const scope char*, mode_t);
1799 int fchmod(int, mode_t);
1800 int fstat(int, stat*);
1801 int lstat(const scope char*, stat*);
1802 int mkdir(const scope char*, mode_t);
1803 int mkfifo(const scope char*, mode_t);
1804 int stat(const scope char*, stat*);
1805 mode_t umask(mode_t);
1808 int chmod(const scope char*, mode_t
);
1809 int fchmod(int, mode_t
);
1810 //int fstat(int, stat_t*);
1811 //int lstat(const scope char*, stat_t*);
1812 int mkdir(const scope char*, mode_t
);
1813 int mkfifo(const scope char*, mode_t
);
1814 //int stat(const scope char*, stat_t*);
1815 mode_t
umask(mode_t
);
1817 version (CRuntime_Glibc
)
1819 static if ( __USE_LARGEFILE64
)
1821 int fstat64(int, stat_t
*) @trusted;
1822 alias fstat64 fstat
;
1824 int lstat64(const scope char*, stat_t
*);
1825 alias lstat64 lstat
;
1827 int stat64(const scope char*, stat_t
*);
1832 int fstat(int, stat_t
*) @trusted;
1833 int lstat(const scope char*, stat_t
*);
1834 int stat(const scope char*, stat_t
*);
1837 else version (Solaris
)
1841 int fstat(int, stat_t
*) @trusted;
1842 int lstat(const scope char*, stat_t
*);
1843 int stat(const scope char*, stat_t
*);
1845 static if (__USE_LARGEFILE64
)
1847 alias fstat fstat64
;
1848 alias lstat lstat64
;
1854 static if (__USE_LARGEFILE64
)
1856 int fstat64(int, stat_t
*) @trusted;
1857 alias fstat64 fstat
;
1859 int lstat64(const scope char*, stat_t
*);
1860 alias lstat64 lstat
;
1862 int stat64(const scope char*, stat_t
*);
1867 int fstat(int, stat_t
*) @trusted;
1868 int lstat(const scope char*, stat_t
*);
1869 int stat(const scope char*, stat_t
*);
1873 else version (Darwin
)
1875 // OS X maintains backwards compatibility with older binaries using 32-bit
1876 // inode functions by appending $INODE64 to newer 64-bit inode functions.
1881 int fstat(int, stat_t
*);
1882 int lstat(const scope char*, stat_t
*);
1883 int stat(const scope char*, stat_t
*);
1887 pragma(mangle
, "fstat$INODE64") int fstat(int, stat_t
*);
1888 pragma(mangle
, "lstat$INODE64") int lstat(const scope char*, stat_t
*);
1889 pragma(mangle
, "stat$INODE64") int stat(const scope char*, stat_t
*);
1894 int fstat(int, stat_t
*);
1895 int lstat(const scope char*, stat_t
*);
1896 int stat(const scope char*, stat_t
*);
1899 else version (FreeBSD
)
1903 int fstat(int, stat_t
*);
1904 int lstat(const scope char*, stat_t
*);
1905 int stat(const scope char*, stat_t
*);
1909 static if (__FreeBSD_version
>= INO64_FIRST
)
1911 pragma(mangle
, "fstat@FBSD_1.5") int fstat(int, stat_t
*);
1912 pragma(mangle
, "lstat@FBSD_1.5") int lstat(const scope char*, stat_t
*);
1913 pragma(mangle
, "stat@FBSD_1.5") int stat(const scope char*, stat_t
*);
1917 pragma(mangle
, "fstat@FBSD_1.0") int fstat(int, stat_t
*);
1918 pragma(mangle
, "lstat@FBSD_1.0") int lstat(const scope char*, stat_t
*);
1919 pragma(mangle
, "stat@FBSD_1.0") int stat(const scope char*, stat_t
*);
1923 else version (NetBSD
)
1925 int __fstat50(int, stat_t
*);
1926 int __lstat50(const scope char*, stat_t
*);
1927 int __stat50(const scope char*, stat_t
*);
1928 alias __fstat50 fstat
;
1929 alias __lstat50 lstat
;
1930 alias __stat50 stat
;
1932 else version (OpenBSD
)
1934 int fstat(int, stat_t
*);
1935 int lstat(const scope char*, stat_t
*);
1936 int stat(const scope char*, stat_t
*);
1938 else version (DragonFlyBSD
)
1940 int fstat(int, stat_t
*);
1941 int lstat(const scope char*, stat_t
*);
1942 int stat(const scope char*, stat_t
*);
1944 else version (CRuntime_Bionic
)
1946 int fstat(int, stat_t
*) @trusted;
1947 int lstat(const scope char*, stat_t
*);
1948 int stat(const scope char*, stat_t
*);
1950 else version (CRuntime_Musl
)
1952 pragma(mangle
, muslRedirTime64Mangle
!("stat", "__stat_time64"))
1953 int stat(const scope char*, stat_t
*);
1954 pragma(mangle
, muslRedirTime64Mangle
!("fstat", "__fstat_time64"))
1955 int fstat(int, stat_t
*);
1956 pragma(mangle
, muslRedirTime64Mangle
!("lstat", "__lstat_time64"))
1957 int lstat(const scope char*, stat_t
*);
1959 alias fstat fstat64
;
1960 alias lstat lstat64
;
1963 else version (CRuntime_UClibc
)
1965 static if ( __USE_LARGEFILE64
)
1967 int fstat64(int, stat_t
*) @trusted;
1968 alias fstat64 fstat
;
1970 int lstat64(const scope char*, stat_t
*);
1971 alias lstat64 lstat
;
1973 int stat64(const scope char*, stat_t
*);
1978 int fstat(int, stat_t
*) @trusted;
1979 int lstat(const scope char*, stat_t
*);
1980 int stat(const scope char*, stat_t
*);
1985 // Typed Memory Objects (TYM)
2007 enum S_IFMT
= 0xF000; // octal 0170000
2008 enum S_IFBLK
= 0x6000; // octal 0060000
2009 enum S_IFCHR
= 0x2000; // octal 0020000
2010 enum S_IFIFO
= 0x1000; // octal 0010000
2011 enum S_IFREG
= 0x8000; // octal 0100000
2012 enum S_IFDIR
= 0x4000; // octal 0040000
2013 enum S_IFLNK
= 0xA000; // octal 0120000
2014 enum S_IFSOCK
= 0xC000; // octal 0140000
2016 else version (Darwin
)
2018 enum S_IFMT
= 0xF000; // octal 0170000
2019 enum S_IFBLK
= 0x6000; // octal 0060000
2020 enum S_IFCHR
= 0x2000; // octal 0020000
2021 enum S_IFIFO
= 0x1000; // octal 0010000
2022 enum S_IFREG
= 0x8000; // octal 0100000
2023 enum S_IFDIR
= 0x4000; // octal 0040000
2024 enum S_IFLNK
= 0xA000; // octal 0120000
2025 enum S_IFSOCK
= 0xC000; // octal 0140000
2027 else version (FreeBSD
)
2029 enum S_IFMT
= 0xF000; // octal 0170000
2030 enum S_IFBLK
= 0x6000; // octal 0060000
2031 enum S_IFCHR
= 0x2000; // octal 0020000
2032 enum S_IFIFO
= 0x1000; // octal 0010000
2033 enum S_IFREG
= 0x8000; // octal 0100000
2034 enum S_IFDIR
= 0x4000; // octal 0040000
2035 enum S_IFLNK
= 0xA000; // octal 0120000
2036 enum S_IFSOCK
= 0xC000; // octal 0140000
2038 else version (NetBSD
)
2040 enum S_IFMT
= 0xF000; // octal 0170000
2041 enum S_IFBLK
= 0x6000; // octal 0060000
2042 enum S_IFCHR
= 0x2000; // octal 0020000
2043 enum S_IFIFO
= 0x1000; // octal 0010000
2044 enum S_IFREG
= 0x8000; // octal 0100000
2045 enum S_IFDIR
= 0x4000; // octal 0040000
2046 enum S_IFLNK
= 0xA000; // octal 0120000
2047 enum S_IFSOCK
= 0xC000; // octal 0140000
2049 else version (OpenBSD
)
2051 enum S_IFMT
= 0xF000; // octal 0170000
2052 enum S_IFBLK
= 0x6000; // octal 0060000
2053 enum S_IFCHR
= 0x2000; // octal 0020000
2054 enum S_IFIFO
= 0x1000; // octal 0010000
2055 enum S_IFREG
= 0x8000; // octal 0100000
2056 enum S_IFDIR
= 0x4000; // octal 0040000
2057 enum S_IFLNK
= 0xA000; // octal 0120000
2058 enum S_IFSOCK
= 0xC000; // octal 0140000
2060 else version (DragonFlyBSD
)
2062 enum S_IFMT
= 0xF000; // octal 0170000
2063 enum S_IFBLK
= 0x6000; // octal 0060000
2064 enum S_IFCHR
= 0x2000; // octal 0020000
2065 enum S_IFIFO
= 0x1000; // octal 0010000
2066 enum S_IFREG
= 0x8000; // octal 0100000
2067 enum S_IFDIR
= 0x4000; // octal 0040000
2068 enum S_IFLNK
= 0xA000; // octal 0120000
2069 enum S_IFSOCK
= 0xC000; // octal 0140000
2071 else version (Solaris
)
2073 enum S_IFMT
= 0xF000;
2074 enum S_IFBLK
= 0x6000;
2075 enum S_IFCHR
= 0x2000;
2076 enum S_IFIFO
= 0x1000;
2077 enum S_IFREG
= 0x8000;
2078 enum S_IFDIR
= 0x4000;
2079 enum S_IFLNK
= 0xA000;
2080 enum S_IFSOCK
= 0xC000;
2081 enum S_IFDOOR
= 0xD000;
2082 enum S_IFPORT
= 0xE000;
2086 static assert(false, "Unsupported platform");
2090 int mknod(const scope char*, mode_t, dev_t);
2093 version (CRuntime_Glibc
)
2095 int mknod(const scope char*, mode_t
, dev_t
);
2097 else version (Darwin
)
2099 int mknod(const scope char*, mode_t
, dev_t
);
2101 else version (FreeBSD
)
2105 int mknod(const scope char*, mode_t
, dev_t
);
2109 static if (__FreeBSD_version
>= INO64_FIRST
)
2110 pragma(mangle
, "mknod@FBSD_1.5") int mknod(const scope char*, mode_t
, dev_t
);
2112 pragma(mangle
, "mknod@FBSD_1.0") int mknod(const scope char*, mode_t
, dev_t
);
2115 else version (NetBSD
)
2117 int mknod(const scope char*, mode_t
, dev_t
);
2119 else version (OpenBSD
)
2121 int mknod(const scope char*, mode_t
, dev_t
);
2123 else version (DragonFlyBSD
)
2125 int mknod(const scope char*, mode_t
, dev_t
);
2127 else version (Solaris
)
2129 int mknod(const scope char*, mode_t
, dev_t
);
2131 else version (CRuntime_Bionic
)
2133 int mknod(const scope char*, mode_t
, dev_t
);
2135 else version (CRuntime_Musl
)
2137 int mknod(const scope char*, mode_t
, dev_t
);
2139 else version (CRuntime_UClibc
)
2141 int mknod(const scope char*, mode_t
, dev_t
);
2145 static assert(false, "Unsupported platform");