xref: /netbsd-src/external/gpl3/gcc/dist/libphobos/libdruntime/core/sys/posix/sys/statvfs.d (revision 0a3071956a3a9fdebdbf7f338cf2d439b45fc728)
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