1 /++
2 D header file correspoding to sys/statvfs.h.
3
4 Copyright: Copyright 2012 -
5 License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
6 Authors: Robert Klotzner and $(HTTP jmdavisprog.com, Jonathan M Davis)
7 Standards: $(HTTP http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_statvfs.h.html,
8 The Open Group Base Specifications Issue 7 IEEE Std 1003.1, 2018 Edition)
9 +/
10 module core.sys.posix.sys.statvfs;
11 import core.stdc.config;
12 import core.sys.posix.config;
13 public import core.sys.posix.sys.types;
14
version(Posix)15 version (Posix):
16 extern (C) :
17 nothrow:
18 @nogc:
19 @system:
20
21 version (CRuntime_Glibc) {
22 static if (__WORDSIZE == 32)
23 {
24 version=_STATVFSBUF_F_UNUSED;
25 }
26 struct statvfs_t
27 {
28 c_ulong f_bsize;
29 c_ulong f_frsize;
30 fsblkcnt_t f_blocks;
31 fsblkcnt_t f_bfree;
32 fsblkcnt_t f_bavail;
33 fsfilcnt_t f_files;
34 fsfilcnt_t f_ffree;
35 fsfilcnt_t f_favail;
36 c_ulong f_fsid;
37 version (_STATVFSBUF_F_UNUSED)
38 {
39 int __f_unused;
40 }
41 c_ulong f_flag;
42 c_ulong f_namemax;
43 int[6] __f_spare;
44 }
45 /* Definitions for the flag in `f_flag'. These definitions should be
46 kept in sync with the definitions in <sys/mount.h>. */
47 static if (_GNU_SOURCE)
48 {
49 enum FFlag
50 {
51 ST_RDONLY = 1, /* Mount read-only. */
52 ST_NOSUID = 2,
53 ST_NODEV = 4, /* Disallow access to device special files. */
54 ST_NOEXEC = 8, /* Disallow program execution. */
55 ST_SYNCHRONOUS = 16, /* Writes are synced at once. */
56 ST_MANDLOCK = 64, /* Allow mandatory locks on an FS. */
57 ST_WRITE = 128, /* Write on file/directory/symlink. */
58 ST_APPEND = 256, /* Append-only file. */
59 ST_IMMUTABLE = 512, /* Immutable file. */
60 ST_NOATIME = 1024, /* Do not update access times. */
61 ST_NODIRATIME = 2048, /* Do not update directory access times. */
62 ST_RELATIME = 4096 /* Update atime relative to mtime/ctime. */
63
64 }
65 } /* Use GNU. */
66 else
67 { // Posix defined:
68 enum FFlag
69 {
70 ST_RDONLY = 1, /* Mount read-only. */
71 ST_NOSUID = 2
72 }
73 }
74
75 static if ( __USE_FILE_OFFSET64 )
76 {
77 int statvfs64 (const char * file, statvfs_t* buf);
78 alias statvfs64 statvfs;
79
80 int fstatvfs64 (int fildes, statvfs_t *buf) @trusted;
81 alias fstatvfs64 fstatvfs;
82 }
83 else
84 {
85 int statvfs (const char * file, statvfs_t* buf);
86 int fstatvfs (int fildes, statvfs_t *buf);
87 }
88
89 }
90 else version (NetBSD)
91 {
92 enum _VFS_MNAMELEN = 1024;
93 enum _VFS_NAMELEN = 32;
94
95 struct fsid_t
96 {
97 int[2] __fsid_val;
98 }
99
100 struct statvfs_t
101 {
102 c_ulong f_flag;
103 c_ulong f_bsize;
104 c_ulong f_frsize;
105 c_ulong f_iosize;
106 fsblkcnt_t f_blocks;
107 fsblkcnt_t f_bfree;
108 fsblkcnt_t f_bavail;
109 fsblkcnt_t f_bresvd;
110 fsfilcnt_t f_files;
111 fsfilcnt_t f_ffree;
112 fsfilcnt_t f_favail;
113 fsfilcnt_t f_fresvd;
114 ulong f_syncreads;
115 ulong f_syncwrites;
116 ulong f_asyncreads;
117 ulong f_asyncwrites;
118 fsid_t f_fsidx;
119 c_ulong f_fsid;
120 c_ulong f_namemax;
121 int f_owner;
122 int[4] f_spare;
123 char[_VFS_NAMELEN] f_fstypename = 0;
124 char[_VFS_MNAMELEN] f_mntonname = 0;
125 char[_VFS_MNAMELEN] f_mntfromname = 0;
126 }
127
128 enum FFlag
129 {
130 ST_RDONLY = 1, /* Mount read-only. */
131 ST_NOSUID = 2
132 }
133
134 int statvfs (const char * file, statvfs_t* buf);
135 int fstatvfs (int fildes, statvfs_t *buf) @trusted;
136 }
137 else version (OpenBSD)
138 {
139 struct statvfs_t
140 {
141 c_ulong f_bsize;
142 c_ulong f_frsize;
143 fsblkcnt_t f_blocks;
144 fsblkcnt_t f_bfree;
145 fsblkcnt_t f_bavail;
146 fsfilcnt_t f_files;
147 fsfilcnt_t f_ffree;
148 fsfilcnt_t f_favail;
149 c_ulong f_fsid;
150 c_ulong f_flag;
151 c_ulong f_namemax;
152 }
153
154 enum uint ST_RDONLY = 1;
155 enum uint ST_NOSUID = 2;
156
157 int statvfs (const char* file, statvfs_t* buf);
158 int fstatvfs (int fildes, statvfs_t* buf) @trusted;
159 }
160 else version (FreeBSD)
161 {
162 struct statvfs_t
163 {
164 fsblkcnt_t f_bavail;
165 fsblkcnt_t f_bfree;
166 fsblkcnt_t f_blocks;
167 fsfilcnt_t f_favail;
168 fsfilcnt_t f_ffree;
169 fsfilcnt_t f_files;
170 ulong f_bsize;
171 ulong f_flag;
172 ulong f_frsize;
173 ulong f_fsid;
174 ulong f_namemax;
175 }
176
177 enum uint ST_RDONLY = 0x1;
178 enum uint ST_NOSUID = 0x2;
179
180 version (GNU)
181 {
182 int fstatvfs(int, statvfs_t*);
183 int statvfs(const char*, statvfs_t*);
184 }
185 else
186 {
187 pragma(mangle, "fstatvfs@FBSD_1.0") int fstatvfs(int, statvfs_t*);
188 pragma(mangle, "statvfs@FBSD_1.0") int statvfs(const char*, statvfs_t*);
189 }
190 }
191 else
192 {
193 struct statvfs_t
194 {
195 c_ulong f_bsize;
196 c_ulong f_frsize;
197 fsblkcnt_t f_blocks;
198 fsblkcnt_t f_bfree;
199 fsblkcnt_t f_bavail;
200 fsfilcnt_t f_files;
201 fsfilcnt_t f_ffree;
202 fsfilcnt_t f_favail;
203 c_ulong f_fsid;
204 c_ulong f_flag;
205 c_ulong f_namemax;
206 }
207
208 enum FFlag
209 {
210 ST_RDONLY = 1, /* Mount read-only. */
211 ST_NOSUID = 2
212 }
213
214 int statvfs (const char * file, statvfs_t* buf);
215 int fstatvfs (int fildes, statvfs_t *buf) @trusted;
216 }
217