Skip to content

Commit aadbcf5

Browse files
qinghontgross35
authored andcommitted
netbsd/openbsd: Export ioctl request generator macros
(backport <#4460>) (cherry picked from commit e7cf1cc)
1 parent eed2be9 commit aadbcf5

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
@@ -912,9 +921,14 @@ WSTOPPED
912921
WTRAPPED
913922
YESEXPR
914923
YESSTR
924+
_IO
925+
_IOC
915926
_IOFBF
916927
_IOLBF
917928
_IONBF
929+
_IOR
930+
_IOW
931+
_IOWR
918932
_MAX_PAGE_SHIFT
919933
_PC_2_SYMLINKS
920934
_PC_ALLOC_SIZE_MIN

src/unix/bsd/netbsdlike/mod.rs

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

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

1741+
// sys/ioccom.h
1742+
pub const fn IOCPARM_LEN(x: u32) -> u32 {
1743+
(x >> 16) & crate::IOCPARM_MASK
1744+
}
1745+
1746+
pub const fn IOCBASECMD(x: u32) -> u32 {
1747+
x & (!(crate::IOCPARM_MASK << 16))
1748+
}
1749+
1750+
pub const fn IOCGROUP(x: u32) -> u32 {
1751+
(x >> 8) & 0xff
1752+
}
1753+
1754+
pub const fn _IOC(inout: c_ulong, group: c_ulong, num: c_ulong, len: c_ulong) -> c_ulong {
1755+
(inout) | (((len) & crate::IOCPARM_MASK as c_ulong) << 16) | ((group) << 8) | (num)
1756+
}
1757+
17411758
// sys/mount.h
17421759
pub const MNT_NOPERM: c_int = 0x00000020;
17431760
pub const MNT_WXALLOWED: c_int = 0x00000800;

0 commit comments

Comments
 (0)