Skip to content
This repository was archived by the owner on Feb 8, 2024. It is now read-only.

Commit d619e64

Browse files
authored
Merge pull request dlang#2265 from jmdavis/mount
Fix FreeBSD's statvfs merged-on-behalf-of: Petar Kirov <[email protected]>
2 parents 588a920 + 5c01638 commit d619e64

File tree

6 files changed

+415
-41
lines changed

6 files changed

+415
-41
lines changed

mak/COPY

+1
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ COPY=\
8383
$(IMPDIR)\core\sys\freebsd\sys\elf_common.d \
8484
$(IMPDIR)\core\sys\freebsd\sys\event.d \
8585
$(IMPDIR)\core\sys\freebsd\sys\link_elf.d \
86+
$(IMPDIR)\core\sys\freebsd\sys\mount.d \
8687
$(IMPDIR)\core\sys\freebsd\sys\mman.d \
8788
$(IMPDIR)\core\sys\freebsd\time.d \
8889
\

mak/SRCS

+1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ SRCS=\
6969
src\core\sys\freebsd\sys\event.d \
7070
src\core\sys\freebsd\sys\link_elf.d \
7171
src\core\sys\freebsd\sys\mman.d \
72+
src\core\sys\freebsd\sys\mount.d \
7273
src\core\sys\freebsd\time.d \
7374
\
7475
src\core\sys\dragonflybsd\dlfcn.d \

src/core/sys/freebsd/sys/mount.d

+303
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,303 @@
1+
//Written in the D programming language
2+
3+
/++
4+
D header file for FreeBSD's sys/mount.h.
5+
6+
Copyright: Copyright 2018 -
7+
License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
8+
Authors: $(HTTP jmdavisprog.com, Jonathan M Davis)
9+
+/
10+
module core.sys.freebsd.sys.mount;
11+
12+
version(FreeBSD):
13+
14+
import core.sys.posix.sys.stat : stat_t;
15+
import core.sys.posix.sys.types : uid_t;
16+
17+
extern(C) @nogc nothrow:
18+
19+
struct fsid_t
20+
{
21+
int[2] val;
22+
}
23+
24+
enum MAXFIDSZ = 16;
25+
26+
struct fid
27+
{
28+
ushort fid_len;
29+
ushort fid_data0;
30+
char[MAXFIDSZ] fid_data;
31+
}
32+
33+
enum MFSNAMELEN = 16;
34+
enum MNAMELEN = 88;
35+
enum STATFS_VERSION = 0x20030518;
36+
37+
struct statfs_t
38+
{
39+
uint f_version;
40+
uint f_type;
41+
ulong f_flags;
42+
ulong f_bsize;
43+
ulong f_iosize;
44+
ulong f_blocks;
45+
ulong f_bfree;
46+
long f_bavail;
47+
ulong f_files;
48+
long f_ffree;
49+
ulong f_syncwrites;
50+
ulong f_asyncwrites;
51+
ulong f_syncreads;
52+
ulong f_asyncreads;
53+
ulong[10] f_spare;
54+
uint f_namemax;
55+
uid_t f_owner;
56+
fsid_t f_fsid;
57+
char[80] f_charspare;
58+
char[MFSNAMELEN] f_fstypename;
59+
char[MNAMELEN] f_mntfromname;
60+
char[MNAMELEN] f_mntonname;
61+
}
62+
63+
64+
enum ulong MNT_RDONLY = 0x0000000000000001;
65+
enum ulong MNT_SYNCHRONOUS = 0x0000000000000002;
66+
enum ulong MNT_NOEXEC = 0x0000000000000004;
67+
enum ulong MNT_NOSUID = 0x0000000000000008;
68+
enum ulong MNT_NFS4ACLS = 0x0000000000000010;
69+
enum ulong MNT_UNION = 0x0000000000000020;
70+
enum ulong MNT_ASYNC = 0x0000000000000040;
71+
enum ulong MNT_SUIDDIR = 0x0000000000100000;
72+
enum ulong MNT_SOFTDEP = 0x0000000000200000;
73+
enum ulong MNT_NOSYMFOLLOW = 0x0000000000400000;
74+
enum ulong MNT_GJOURNAL = 0x0000000002000000;
75+
enum ulong MNT_MULTILABEL = 0x0000000004000000;
76+
enum ulong MNT_ACLS = 0x0000000008000000;
77+
enum ulong MNT_NOATIME = 0x0000000010000000;
78+
enum ulong MNT_NOCLUSTERR = 0x0000000040000000;
79+
enum ulong MNT_NOCLUSTERW = 0x0000000080000000;
80+
enum ulong MNT_SUJ = 0x0000000100000000;
81+
enum ulong MNT_AUTOMOUNTED = 0x0000000200000000;
82+
83+
enum ulong MNT_EXRDONLY = 0x0000000000000080;
84+
enum ulong MNT_EXPORTED = 0x0000000000000100;
85+
enum ulong MNT_DEFEXPORTED = 0x0000000000000200;
86+
enum ulong MNT_EXPORTANON = 0x0000000000000400;
87+
enum ulong MNT_EXKERB = 0x0000000000000800;
88+
enum ulong MNT_EXPUBLIC = 0x0000000020000000;
89+
90+
enum ulong MNT_LOCAL = 0x0000000000001000;
91+
enum ulong MNT_QUOTA = 0x0000000000002000;
92+
enum ulong MNT_ROOTFS = 0x0000000000004000;
93+
enum ulong MNT_USER = 0x0000000000008000;
94+
enum ulong MNT_IGNORE = 0x0000000000800000;
95+
96+
enum MNT_VISFLAGMASK = MNT_RDONLY | MNT_SYNCHRONOUS | MNT_NOEXEC |
97+
MNT_NOSUID | MNT_UNION | MNT_SUJ |
98+
MNT_ASYNC | MNT_EXRDONLY | MNT_EXPORTED |
99+
MNT_DEFEXPORTED | MNT_EXPORTANON| MNT_EXKERB |
100+
MNT_LOCAL | MNT_USER | MNT_QUOTA |
101+
MNT_ROOTFS | MNT_NOATIME | MNT_NOCLUSTERR |
102+
MNT_NOCLUSTERW | MNT_SUIDDIR | MNT_SOFTDEP |
103+
MNT_IGNORE | MNT_EXPUBLIC | MNT_NOSYMFOLLOW |
104+
MNT_GJOURNAL | MNT_MULTILABEL | MNT_ACLS |
105+
MNT_NFS4ACLS | MNT_AUTOMOUNTED;
106+
107+
enum MNT_UPDATEMASK = MNT_NOSUID | MNT_NOEXEC |
108+
MNT_SYNCHRONOUS | MNT_UNION | MNT_ASYNC |
109+
MNT_NOATIME |
110+
MNT_NOSYMFOLLOW | MNT_IGNORE |
111+
MNT_NOCLUSTERR | MNT_NOCLUSTERW | MNT_SUIDDIR |
112+
MNT_ACLS | MNT_USER | MNT_NFS4ACLS |
113+
MNT_AUTOMOUNTED;
114+
115+
enum ulong MNT_UPDATE = 0x0000000000010000;
116+
enum ulong MNT_DELEXPORT = 0x0000000000020000;
117+
enum ulong MNT_RELOAD = 0x0000000000040000;
118+
enum ulong MNT_FORCE = 0x0000000000080000;
119+
enum ulong MNT_SNAPSHOT = 0x0000000001000000;
120+
enum ulong MNT_NONBUSY = 0x0000000004000000;
121+
enum ulong MNT_BYFSID = 0x0000000008000000;
122+
enum ulong MNT_CMDFLAGS = MNT_UPDATE | MNT_DELEXPORT | MNT_RELOAD |
123+
MNT_FORCE | MNT_SNAPSHOT | MNT_NONBUSY |
124+
MNT_BYFSID;
125+
126+
enum uint MNTK_UNMOUNTF = 0x00000001;
127+
enum uint MNTK_ASYNC = 0x00000002;
128+
enum uint MNTK_SOFTDEP = 0x00000004;
129+
enum uint MNTK_NOINSMNTQ = 0x00000008;
130+
enum uint MNTK_DRAINING = 0x00000010;
131+
enum uint MNTK_REFEXPIRE = 0x00000020;
132+
enum uint MNTK_EXTENDED_SHARED = 0x00000040;
133+
enum uint MNTK_SHARED_WRITES = 0x00000080;
134+
enum uint MNTK_NO_IOPF = 0x00000100;
135+
enum uint MNTK_VGONE_UPPER = 0x00000200;
136+
enum uint MNTK_VGONE_WAITER = 0x00000400;
137+
enum uint MNTK_LOOKUP_EXCL_DOTDOT = 0x00000800;
138+
enum uint MNTK_MARKER = 0x00001000;
139+
enum uint MNTK_UNMAPPED_BUFS = 0x00002000;
140+
enum uint MNTK_USES_BCACHE = 0x00004000;
141+
enum uint MNTK_NOASYNC = 0x00800000;
142+
enum uint MNTK_UNMOUNT = 0x01000000;
143+
enum uint MNTK_MWAIT = 0x02000000;
144+
enum uint MNTK_SUSPEND = 0x08000000;
145+
enum uint MNTK_SUSPEND2 = 0x04000000;
146+
enum uint MNTK_SUSPENDED = 0x10000000;
147+
enum uint MNTK_NULL_NOCACHE = 0x20000000;
148+
enum uint MNTK_LOOKUP_SHARED = 0x40000000;
149+
enum uint MNTK_NOKNOTE = 0x80000000;
150+
151+
enum VFS_VFSCONF = 0;
152+
enum VFS_GENERIC = 0;
153+
154+
enum VFS_MAXTYPENUM = 1;
155+
enum VFS_CONF = 2;
156+
157+
enum MNT_WAIT = 1;
158+
enum MNT_NOWAIT = 2;
159+
enum MNT_LAZY = 3;
160+
enum MNT_SUSPEND = 4;
161+
162+
struct fhandle_t
163+
{
164+
fsid_t fh_fsid;
165+
fid fh_fid;
166+
}
167+
168+
// TODO - requires declarations from elsewhere that we don't currently have bindings for.
169+
/+
170+
struct oexport_args
171+
{
172+
int ex_flags;
173+
uid_t ex_root;
174+
xucred ex_anon;
175+
sockaddr* ex_addr;
176+
ubyte ex_addrlen;
177+
sockaddr* ex_mask;
178+
ubyte ex_masklen;
179+
char* ex_indexfile;
180+
}
181+
182+
enum MAXSECFLAVORS = 5;
183+
184+
struct export_args
185+
{
186+
int ex_flags;
187+
uid_t ex_root;
188+
xucred ex_anon;
189+
sockaddr* ex_addr;
190+
ubyte ex_addrlen;
191+
sockaddr* ex_mask;
192+
ubyte ex_masklen;
193+
char* ex_indexfile;
194+
int ex_numsecflavors;
195+
int[MAXSECFLAVORS] ex_secflavors;
196+
}
197+
198+
struct nfs_public
199+
{
200+
int np_valid;
201+
fhandle_t np_handle;
202+
mount_t* np_mount;
203+
char* np_index;
204+
}
205+
206+
struct vfsconf
207+
{
208+
uint vfc_version;
209+
char[MFSNAMELEN] vfc_name;
210+
vfsops* vfc_vfsops;
211+
int vfc_typenum;
212+
int vfc_refcount;
213+
int vfc_flags;
214+
vfsoptdecl* vfc_opts;
215+
TAILQ_ENTRY(vfsconf) vfc_list;
216+
}
217+
218+
struct xvfsconf
219+
{
220+
vfsops* vfc_vfsops;
221+
char[MFSNAMELEN] vfc_name;
222+
int vfc_typenum;
223+
int vfc_refcount;
224+
int vfc_flags;
225+
vfsconf* vfc_next;
226+
}
227+
+/
228+
229+
struct ovfsconf
230+
{
231+
void* vfc_vfsops;
232+
char[32] vfc_name;
233+
int vfc_index;
234+
int vfc_refcount;
235+
int vfc_flags;
236+
}
237+
238+
enum uint VFCF_STATIC = 0x00010000;
239+
enum uint VFCF_NETWORK = 0x00020000;
240+
enum uint VFCF_READONLY = 0x00040000;
241+
enum uint VFCF_SYNTHETIC = 0x00080000;
242+
enum uint VFCF_LOOPBACK = 0x00100000;
243+
enum uint VFCF_UNICODE = 0x00200000;
244+
enum uint VFCF_JAIL = 0x00400000;
245+
enum uint VFCF_DELEGADMIN = 0x00800000;
246+
enum uint VFCF_SBDRY = 0x01000000;
247+
248+
alias fsctlop_t = uint;
249+
250+
struct vfsidctl
251+
{
252+
int vc_vers;
253+
fsid_t vc_fsid;
254+
char[MFSNAMELEN] vc_fstypename;
255+
fsctlop_t vc_op;
256+
void* vc_ptr;
257+
size_t vc_len;
258+
uint[12] vc_spare;
259+
}
260+
261+
enum uint VFS_CTL_VERS1 = 0x01;
262+
263+
enum uint VFS_CTL_QUERY = 0x00010001;
264+
enum uint VFS_CTL_TIMEO = 0x00010002;
265+
enum uint VFS_CTL_NOLOCKS = 0x00010003;
266+
267+
struct vfsquery
268+
{
269+
uint vq_flags;
270+
uint[31] vq_spare;
271+
}
272+
273+
enum uint VQ_NOTRESP = 0x0001;
274+
enum uint VQ_NEEDAUTH = 0x0002;
275+
enum uint VQ_LOWDISK = 0x0004;
276+
enum uint VQ_MOUNT = 0x0008;
277+
enum uint VQ_UNMOUNT = 0x0010;
278+
enum uint VQ_DEAD = 0x0020;
279+
enum uint VQ_ASSIST = 0x0040;
280+
enum uint VQ_NOTRESPLOCK = 0x0080;
281+
enum uint VQ_FLAG0100 = 0x0100;
282+
enum uint VQ_FLAG0200 = 0x0200;
283+
enum uint VQ_FLAG0400 = 0x0400;
284+
enum uint VQ_FLAG0800 = 0x0800;
285+
enum uint VQ_FLAG1000 = 0x1000;
286+
enum uint VQ_FLAG2000 = 0x2000;
287+
enum uint VQ_FLAG4000 = 0x4000;
288+
enum uint VQ_FLAG8000 = 0x8000;
289+
290+
int fhopen(const fhandle_t*, int);
291+
int fhstat(const fhandle_t*, stat_t*);
292+
int fhstatfs(const fhandle_t*, statfs_t*);
293+
int fstatfs(int, statfs_t*);
294+
int getfh(const char*, fhandle_t*);
295+
int getfsstat(statfs_t*, long, int);
296+
int getmntinfo(statfs_t**, int);
297+
int lgetfh(const char*, fhandle_t*);
298+
int mount(const char*, const char*, int, void*);
299+
//int nmount(iovec*, uint, int);
300+
int statfs(const char*, statfs_t*);
301+
int unmount(const char*, int);
302+
303+
//int getvfsbyname(const char*, xvfsconf*);

0 commit comments

Comments
 (0)