Skip to content

Commit 707b475

Browse files
committed
netbsd/openbsd: Export ioctl request generator macros
1 parent bdc4b7d commit 707b475

File tree

5 files changed

+98
-0
lines changed

5 files changed

+98
-0
lines changed

libc-test/semver/netbsd.txt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,17 @@ IFF_SIMPLEX
426426
IFF_UP
427427
IMAXBEL
428428
INIT_PROCESS
429+
IOCBASECMD
430+
IOCGROUP
431+
IOCGROUP_SHIFT
432+
IOCPARM_LEN
433+
IOCPARM_MASK
434+
IOCPARM_SHIFT
435+
IOC_DIRMASK
436+
IOC_IN
437+
IOC_INOUT
438+
IOC_OUT
439+
IOC_VOID
429440
IOV_MAX
430441
IPC_CREAT
431442
IPC_EXCL
@@ -1116,9 +1127,14 @@ XATTR_CREATE
11161127
XATTR_REPLACE
11171128
YESEXPR
11181129
YESSTR
1130+
_IO
1131+
_IOC
11191132
_IOFBF
11201133
_IOLBF
11211134
_IONBF
1135+
_IOR
1136+
_IOW
1137+
_IOWR
11221138
_PC_2_SYMLINKS
11231139
_PC_ACL_EXTENDED
11241140
_PC_FILESIZEBITS

libc-test/semver/openbsd.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,15 @@ IFF_SIMPLEX
267267
IFF_STATICARP
268268
IFF_UP
269269
IMAXBEL
270+
IOCBASECMD
271+
IOCGROUP
272+
IOCPARM_LEN
273+
IOCPARM_MASK
274+
IOC_DIRMASK
275+
IOC_IN
276+
IOC_INOUT
277+
IOC_OUT
278+
IOC_VOID
270279
IOV_MAX
271280
IPC_CREAT
272281
IPC_EXCL
@@ -908,9 +917,14 @@ WSTOPPED
908917
WTRAPPED
909918
YESEXPR
910919
YESSTR
920+
_IO
921+
_IOC
911922
_IOFBF
912923
_IOLBF
913924
_IONBF
925+
_IOR
926+
_IOW
927+
_IOWR
914928
_MAX_PAGE_SHIFT
915929
_PC_2_SYMLINKS
916930
_PC_ALLOC_SIZE_MIN

src/unix/bsd/netbsdlike/mod.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,34 @@ pub const MNT_NODEV: c_int = 0x00000010;
439439
pub const MNT_LOCAL: c_int = 0x00001000;
440440
pub const MNT_QUOTA: c_int = 0x00002000;
441441

442+
// sys/ioccom.h in NetBSD and OpenBSD
443+
pub const IOCPARM_MASK: u32 = 0x1fff;
444+
445+
pub const IOC_VOID: c_ulong = 0x20000000;
446+
pub const IOC_OUT: c_ulong = 0x40000000;
447+
pub const IOC_IN: c_ulong = 0x80000000;
448+
pub const IOC_INOUT: c_ulong = IOC_IN | IOC_OUT;
449+
pub const IOC_DIRMASK: c_ulong = 0xe0000000;
450+
451+
pub const fn _IO(g: c_ulong, n: c_ulong) -> c_ulong {
452+
_IOC(IOC_VOID, g, n, 0)
453+
}
454+
455+
/// Build an ioctl number for an read-only ioctl.
456+
pub const fn _IOR<T>(g: c_ulong, n: c_ulong) -> c_ulong {
457+
_IOC(IOC_OUT, g, n, mem::size_of::<T>() as c_ulong)
458+
}
459+
460+
/// Build an ioctl number for an write-only ioctl.
461+
pub const fn _IOW<T>(g: c_ulong, n: c_ulong) -> c_ulong {
462+
_IOC(IOC_IN, g, n, mem::size_of::<T>() as c_ulong)
463+
}
464+
465+
/// Build an ioctl number for a read-write ioctl.
466+
pub const fn _IOWR<T>(g: c_ulong, n: c_ulong) -> c_ulong {
467+
_IOC(IOC_INOUT, g, n, mem::size_of::<T>() as c_ulong)
468+
}
469+
442470
pub const AF_UNSPEC: c_int = 0;
443471
pub const AF_LOCAL: c_int = 1;
444472
pub const AF_UNIX: c_int = AF_LOCAL;

src/unix/bsd/netbsdlike/netbsd/mod.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1712,6 +1712,29 @@ pub const MNT_WAIT: c_int = 1;
17121712
pub const MNT_NOWAIT: c_int = 2;
17131713
pub const MNT_LAZY: c_int = 3;
17141714

1715+
// sys/ioccom.h
1716+
pub const IOCPARM_SHIFT: u32 = 16;
1717+
pub const IOCGROUP_SHIFT: u32 = 8;
1718+
1719+
pub const fn IOCPARM_LEN(x: u32) -> u32 {
1720+
(x >> IOCPARM_SHIFT) & crate::IOCPARM_MASK
1721+
}
1722+
1723+
pub const fn IOCBASECMD(x: u32) -> u32 {
1724+
x & (!(crate::IOCPARM_MASK << IOCPARM_SHIFT))
1725+
}
1726+
1727+
pub const fn IOCGROUP(x: u32) -> u32 {
1728+
(x >> IOCGROUP_SHIFT) & 0xff
1729+
}
1730+
1731+
pub const fn _IOC(inout: c_ulong, group: c_ulong, num: c_ulong, len: c_ulong) -> c_ulong {
1732+
(inout)
1733+
| (((len) & crate::IOCPARM_MASK as c_ulong) << IOCPARM_SHIFT)
1734+
| ((group) << IOCGROUP_SHIFT)
1735+
| (num)
1736+
}
1737+
17151738
//<sys/timex.h>
17161739
pub const CLOCK_PROCESS_CPUTIME_ID: crate::clockid_t = 2;
17171740
pub const CLOCK_THREAD_CPUTIME_ID: crate::clockid_t = 4;

src/unix/bsd/netbsdlike/openbsd/mod.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1721,6 +1721,23 @@ pub const PF_R: u32 = 0x4;
17211721
pub const PF_MASKOS: u32 = 0x0ff00000;
17221722
pub const PF_MASKPROC: u32 = 0xf0000000;
17231723

1724+
// sys/ioccom.h
1725+
pub const fn IOCPARM_LEN(x: u32) -> u32 {
1726+
(x >> 16) & crate::IOCPARM_MASK
1727+
}
1728+
1729+
pub const fn IOCBASECMD(x: u32) -> u32 {
1730+
x & (!(crate::IOCPARM_MASK << 16))
1731+
}
1732+
1733+
pub const fn IOCGROUP(x: u32) -> u32 {
1734+
(x >> 8) & 0xff
1735+
}
1736+
1737+
pub const fn _IOC(inout: c_ulong, group: c_ulong, num: c_ulong, len: c_ulong) -> c_ulong {
1738+
(inout) | (((len) & crate::IOCPARM_MASK as c_ulong) << 16) | ((group) << 8) | (num)
1739+
}
1740+
17241741
// sys/mount.h
17251742
pub const MNT_NOPERM: c_int = 0x00000020;
17261743
pub const MNT_WXALLOWED: c_int = 0x00000800;

0 commit comments

Comments
 (0)