From a96465da40baba40a051815164d72889a87644e5 Mon Sep 17 00:00:00 2001 From: Steve Lau Date: Fri, 11 Nov 2022 16:27:24 +0800 Subject: add major/minor on BSDs/illumos --- src/unix/bsd/freebsdlike/dragonfly/mod.rs | 8 ++++++++ src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs | 10 ++++++++++ src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs | 10 ++++++++++ src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs | 10 ++++++++++ src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs | 10 ++++++++++ src/unix/bsd/netbsdlike/netbsd/mod.rs | 11 +++++++++++ src/unix/bsd/netbsdlike/openbsd/mod.rs | 13 +++++++++++++ src/unix/solarish/mod.rs | 18 ++++++++++++++++++ 8 files changed, 90 insertions(+) diff --git a/src/unix/bsd/freebsdlike/dragonfly/mod.rs b/src/unix/bsd/freebsdlike/dragonfly/mod.rs index 63c0594f41..72ea8c7504 100644 --- a/src/unix/bsd/freebsdlike/dragonfly/mod.rs +++ b/src/unix/bsd/freebsdlike/dragonfly/mod.rs @@ -1578,6 +1578,14 @@ f! { let (idx, offset) = ((cpu >> 6) & 3, cpu & 63); 0 != cpuset.ary[idx] & (1 << offset) } + + pub fn major(dev: ::dev_t) -> ::c_int { + ((dev >> 8) & 0xff) as ::c_int + } + + pub fn minor(dev: ::dev_t) -> ::c_int { + (dev & 0xffff00ff) as ::c_int + } } safe_f! { diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs index f2d170fb28..de34069eab 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs @@ -442,6 +442,16 @@ safe_f! { } } +f! { + pub fn major(dev: ::dev_t) -> ::c_int { + ((dev >> 8) & 0xff) as ::c_int + } + + pub fn minor(dev: ::dev_t) -> ::c_int { + (dev & 0xffff00ff) as ::c_int + } +} + extern "C" { // Return type ::c_int was removed in FreeBSD 12 pub fn setgrent() -> ::c_int; diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs index 5cd4eff26f..10fcaa03a4 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs @@ -462,6 +462,16 @@ safe_f! { } } +f! { + pub fn major(dev: ::dev_t) -> ::c_int { + (((dev >> 32) & 0xffffff00) | ((dev >> 8) & 0xff)) as ::c_int + } + + pub fn minor(dev: ::dev_t) -> ::c_int { + (((dev >> 24) & 0xff00) | (dev & 0xffff00ff)) as ::c_int + } +} + extern "C" { pub fn setgrent(); pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int) -> ::c_int; diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs index 56564eeb45..0e04a12e70 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs @@ -481,6 +481,16 @@ safe_f! { } } +f! { + pub fn major(dev: ::dev_t) -> ::c_int { + (((dev >> 32) & 0xffffff00) | ((dev >> 8) & 0xff)) as ::c_int + } + + pub fn minor(dev: ::dev_t) -> ::c_int { + (((dev >> 24) & 0xff00) | (dev & 0xffff00ff)) as ::c_int + } +} + extern "C" { pub fn setgrent(); pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int) -> ::c_int; diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs index d60f1a174f..a86ca6e7c5 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs @@ -481,6 +481,16 @@ safe_f! { } } +f! { + pub fn major(dev: ::dev_t) -> ::c_int { + (((dev >> 32) & 0xffffff00) | ((dev >> 8) & 0xff)) as ::c_int + } + + pub fn minor(dev: ::dev_t) -> ::c_int { + (((dev >> 24) & 0xff00) | (dev & 0xffff00ff)) as ::c_int + } +} + extern "C" { pub fn setgrent(); pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int) -> ::c_int; diff --git a/src/unix/bsd/netbsdlike/netbsd/mod.rs b/src/unix/bsd/netbsdlike/netbsd/mod.rs index 402257fd3b..c4b0b5aa3d 100644 --- a/src/unix/bsd/netbsdlike/netbsd/mod.rs +++ b/src/unix/bsd/netbsdlike/netbsd/mod.rs @@ -2464,6 +2464,17 @@ f! { pub fn PROT_MPROTECT_EXTRACT(x: ::c_int) -> ::c_int { (x >> 3) & 0x7 } + + pub fn major(dev: ::dev_t) -> ::c_int { + (((dev as u32) & 0x000fff00) >> 8) as ::c_int + } + + pub fn minor(dev: ::dev_t) -> ::c_int { + let mut res = 0; + res |= ((dev as u32) & 0xfff00000) >> 12; + res |= ((dev as u32) & 0x000000ff); + res as ::c_int + } } safe_f! { diff --git a/src/unix/bsd/netbsdlike/openbsd/mod.rs b/src/unix/bsd/netbsdlike/openbsd/mod.rs index 8099bad1d1..87f48b63b5 100644 --- a/src/unix/bsd/netbsdlike/openbsd/mod.rs +++ b/src/unix/bsd/netbsdlike/openbsd/mod.rs @@ -1729,6 +1729,19 @@ f! { (_ALIGN(::mem::size_of::<::cmsghdr>()) + _ALIGN(length as usize)) as ::c_uint } + + pub fn major(dev: ::dev_t) -> ::c_uint{ + ((dev as ::c_uint) >> 8) & 0xff + } + + pub fn minor(dev: ::dev_t) -> ::c_uint { + let dev = dev as ::c_uint; + let mut res = 0; + res |= (dev) & 0xff; + res |= ((dev) & 0xffff0000) >> 8; + + res + } } safe_f! { diff --git a/src/unix/solarish/mod.rs b/src/unix/solarish/mod.rs index cc688331f4..48ab4dbb92 100644 --- a/src/unix/solarish/mod.rs +++ b/src/unix/solarish/mod.rs @@ -2584,6 +2584,8 @@ const _CMSG_HDR_ALIGNMENT: usize = 4; const _CMSG_DATA_ALIGNMENT: usize = ::mem::size_of::<::c_int>(); +const NEWDEV: ::c_int = 1; + const_fn! { {const} fn _CMSG_HDR_ALIGN(p: usize) -> usize { (p + _CMSG_HDR_ALIGNMENT - 1) & !(_CMSG_HDR_ALIGNMENT - 1) @@ -3198,6 +3200,10 @@ extern "C" { ) -> ::c_int; pub fn sync(); + + fn __major(version: ::c_int, devnum: ::dev_t) -> ::major_t; + fn __minor(version: ::c_int, devnum: ::dev_t) -> ::minor_t; + fn __makedev(version: ::c_int, majdev: ::major_t, mindev: ::minor_t) -> ::dev_t; } #[link(name = "sendfile")] @@ -3254,6 +3260,18 @@ extern "C" { pub fn lgrp_root(cookie: ::lgrp_cookie_t) -> ::lgrp_id_t; } +pub unsafe fn major(device: ::dev_t) -> ::major_t { + __major(NEWDEV, device) +} + +pub unsafe fn minor(device: ::dev_t) -> ::minor_t { + __minor(NEWDEV, device) +} + +pub unsafe fn makedev(maj: ::major_t, min: ::minor_t) -> ::dev_t { + __makedev(NEWDEV, maj, min) +} + mod compat; pub use self::compat::*; -- cgit v1.2.1 From f714e566b680bc75f211f391e1ffe05ab2852cfb Mon Sep 17 00:00:00 2001 From: Steve Lau Date: Fri, 21 Apr 2023 08:44:44 +0800 Subject: build: add necessary header on illumos --- libc-test/build.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/libc-test/build.rs b/libc-test/build.rs index ac0f996fc4..8c20546771 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -821,6 +821,7 @@ fn test_solarish(target: &str) { "sys/ioctl.h", "sys/lgrp_user.h", "sys/loadavg.h", + "sys/mkdev.h", "sys/mman.h", "sys/mount.h", "sys/priv.h", -- cgit v1.2.1 From 6c19c7cad690bcf1904c92743f7c160d6d445a2f Mon Sep 17 00:00:00 2001 From: Steve Lau Date: Sat, 6 May 2023 15:18:20 +0800 Subject: fix clippy --- src/unix/bsd/netbsdlike/netbsd/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/unix/bsd/netbsdlike/netbsd/mod.rs b/src/unix/bsd/netbsdlike/netbsd/mod.rs index c4b0b5aa3d..d9ffa923d8 100644 --- a/src/unix/bsd/netbsdlike/netbsd/mod.rs +++ b/src/unix/bsd/netbsdlike/netbsd/mod.rs @@ -2472,7 +2472,7 @@ f! { pub fn minor(dev: ::dev_t) -> ::c_int { let mut res = 0; res |= ((dev as u32) & 0xfff00000) >> 12; - res |= ((dev as u32) & 0x000000ff); + res |= (dev as u32) & 0x000000ff; res as ::c_int } } -- cgit v1.2.1