Skip to content

Commit cdf9aa7

Browse files
committed
Auto merge of #2999 - SteveLauC:major/minor-on-BSDs, r=JohnTitor
add major/minor on BSDs/illumos This PR adds `major/minor` on BSDs and `major/minor/makedev` on illumos. Ref: * [FreeBSD 11](https://github.com/freebsd/freebsd-src/blob/3e9337c6b211e778829ed3af783cd41447a8721b/sys/sys/types.h#L372-L374) ```c #define major(x) ((int)(((u_int)(x) >> 8)&0xff)) /* major number */ #define minor(x) ((int)((x)&0xffff00ff)) /* minor number */ ``` * [FreeBSD 12/13/14](https://github.com/freebsd/freebsd-src/blob/3d98e253febf816e6e2aea7d3b1c013c421895de/sys/sys/types.h#L332-L341) ```c static __inline int __major(dev_t _d) { return (((_d >> 32) & 0xffffff00) | ((_d >> 8) & 0xff)); } static __inline int __minor(dev_t _d) { return (((_d >> 24) & 0xff00) | (_d & 0xffff00ff)); } ``` * [DragonFly](https://github.com/DragonFlyBSD/DragonFlyBSD/blob/d7a10f947f5344fc95e874ca3b83e9e8d0986b25/sys/sys/types.h#L170-L171) ```c #define major(x) ((int)(((u_int)(x) >> 8)&0xff)) /* major number */ #define minor(x) ((int)((x)&0xffff00ff)) /* minor number */ ``` * [NetBSD](https://github.com/NetBSD/src/blob/a25a6fec1b0a676fc5b36fa01b2990e775775d90/sys/sys/types.h#L264-L266) ```c #define major(x) ((devmajor_t)(((uint32_t)(x) & 0x000fff00) >> 8)) #define minor(x) ((devminor_t)((((uint32_t)(x) & 0xfff00000) >> 12) | \ (((uint32_t)(x) & 0x000000ff) >> 0))) ``` * [OpenBSD](https://github.com/openbsd/src/blob/05cbc9aa8d8372e83274c75e35add6b8073c26f5/sys/sys/types.h#L211-L212) ```c #define major(x) (((unsigned)(x) >> 8) & 0xff) #define minor(x) ((unsigned)((x) & 0xff) | (((x) & 0xffff0000) >> 8)) ``` * illumos: 1. [mkdev.c](https://github.com/illumos/illumos-gate/blob/8b26092d555bd1deaacf79ea64da374602aefb65/usr/src/lib/libc/port/gen/mkdev.c#L40-L146) 2. [mkdev.h](https://github.com/illumos/illumos-gate/blob/8b26092d555bd1deaacf79ea64da374602aefb65/usr/src/uts/common/sys/mkdev.h#L97-L99)
2 parents a11d63a + 0449416 commit cdf9aa7

File tree

9 files changed

+91
-0
lines changed

9 files changed

+91
-0
lines changed

libc-test/build.rs

+1
Original file line numberDiff line numberDiff line change
@@ -821,6 +821,7 @@ fn test_solarish(target: &str) {
821821
"sys/ioctl.h",
822822
"sys/lgrp_user.h",
823823
"sys/loadavg.h",
824+
"sys/mkdev.h",
824825
"sys/mman.h",
825826
"sys/mount.h",
826827
"sys/priv.h",

src/unix/bsd/freebsdlike/dragonfly/mod.rs

+8
Original file line numberDiff line numberDiff line change
@@ -1578,6 +1578,14 @@ f! {
15781578
let (idx, offset) = ((cpu >> 6) & 3, cpu & 63);
15791579
0 != cpuset.ary[idx] & (1 << offset)
15801580
}
1581+
1582+
pub fn major(dev: ::dev_t) -> ::c_int {
1583+
((dev >> 8) & 0xff) as ::c_int
1584+
}
1585+
1586+
pub fn minor(dev: ::dev_t) -> ::c_int {
1587+
(dev & 0xffff00ff) as ::c_int
1588+
}
15811589
}
15821590

15831591
safe_f! {

src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs

+10
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,16 @@ safe_f! {
442442
}
443443
}
444444

445+
f! {
446+
pub fn major(dev: ::dev_t) -> ::c_int {
447+
((dev >> 8) & 0xff) as ::c_int
448+
}
449+
450+
pub fn minor(dev: ::dev_t) -> ::c_int {
451+
(dev & 0xffff00ff) as ::c_int
452+
}
453+
}
454+
445455
extern "C" {
446456
// Return type ::c_int was removed in FreeBSD 12
447457
pub fn setgrent() -> ::c_int;

src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs

+10
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,16 @@ safe_f! {
462462
}
463463
}
464464

465+
f! {
466+
pub fn major(dev: ::dev_t) -> ::c_int {
467+
(((dev >> 32) & 0xffffff00) | ((dev >> 8) & 0xff)) as ::c_int
468+
}
469+
470+
pub fn minor(dev: ::dev_t) -> ::c_int {
471+
(((dev >> 24) & 0xff00) | (dev & 0xffff00ff)) as ::c_int
472+
}
473+
}
474+
465475
extern "C" {
466476
pub fn setgrent();
467477
pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int) -> ::c_int;

src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs

+10
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,16 @@ safe_f! {
481481
}
482482
}
483483

484+
f! {
485+
pub fn major(dev: ::dev_t) -> ::c_int {
486+
(((dev >> 32) & 0xffffff00) | ((dev >> 8) & 0xff)) as ::c_int
487+
}
488+
489+
pub fn minor(dev: ::dev_t) -> ::c_int {
490+
(((dev >> 24) & 0xff00) | (dev & 0xffff00ff)) as ::c_int
491+
}
492+
}
493+
484494
extern "C" {
485495
pub fn setgrent();
486496
pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int) -> ::c_int;

src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs

+10
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,16 @@ safe_f! {
481481
}
482482
}
483483

484+
f! {
485+
pub fn major(dev: ::dev_t) -> ::c_int {
486+
(((dev >> 32) & 0xffffff00) | ((dev >> 8) & 0xff)) as ::c_int
487+
}
488+
489+
pub fn minor(dev: ::dev_t) -> ::c_int {
490+
(((dev >> 24) & 0xff00) | (dev & 0xffff00ff)) as ::c_int
491+
}
492+
}
493+
484494
extern "C" {
485495
pub fn setgrent();
486496
pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int) -> ::c_int;

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

+11
Original file line numberDiff line numberDiff line change
@@ -2472,6 +2472,17 @@ f! {
24722472
pub fn PROT_MPROTECT_EXTRACT(x: ::c_int) -> ::c_int {
24732473
(x >> 3) & 0x7
24742474
}
2475+
2476+
pub fn major(dev: ::dev_t) -> ::c_int {
2477+
(((dev as u32) & 0x000fff00) >> 8) as ::c_int
2478+
}
2479+
2480+
pub fn minor(dev: ::dev_t) -> ::c_int {
2481+
let mut res = 0;
2482+
res |= ((dev as u32) & 0xfff00000) >> 12;
2483+
res |= (dev as u32) & 0x000000ff;
2484+
res as ::c_int
2485+
}
24752486
}
24762487

24772488
safe_f! {

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

+13
Original file line numberDiff line numberDiff line change
@@ -1731,6 +1731,19 @@ f! {
17311731
(_ALIGN(::mem::size_of::<::cmsghdr>()) + _ALIGN(length as usize))
17321732
as ::c_uint
17331733
}
1734+
1735+
pub fn major(dev: ::dev_t) -> ::c_uint{
1736+
((dev as ::c_uint) >> 8) & 0xff
1737+
}
1738+
1739+
pub fn minor(dev: ::dev_t) -> ::c_uint {
1740+
let dev = dev as ::c_uint;
1741+
let mut res = 0;
1742+
res |= (dev) & 0xff;
1743+
res |= ((dev) & 0xffff0000) >> 8;
1744+
1745+
res
1746+
}
17341747
}
17351748

17361749
safe_f! {

src/unix/solarish/mod.rs

+18
Original file line numberDiff line numberDiff line change
@@ -2584,6 +2584,8 @@ const _CMSG_HDR_ALIGNMENT: usize = 4;
25842584

25852585
const _CMSG_DATA_ALIGNMENT: usize = ::mem::size_of::<::c_int>();
25862586

2587+
const NEWDEV: ::c_int = 1;
2588+
25872589
const_fn! {
25882590
{const} fn _CMSG_HDR_ALIGN(p: usize) -> usize {
25892591
(p + _CMSG_HDR_ALIGNMENT - 1) & !(_CMSG_HDR_ALIGNMENT - 1)
@@ -3198,6 +3200,10 @@ extern "C" {
31983200
) -> ::c_int;
31993201

32003202
pub fn sync();
3203+
3204+
fn __major(version: ::c_int, devnum: ::dev_t) -> ::major_t;
3205+
fn __minor(version: ::c_int, devnum: ::dev_t) -> ::minor_t;
3206+
fn __makedev(version: ::c_int, majdev: ::major_t, mindev: ::minor_t) -> ::dev_t;
32013207
}
32023208

32033209
#[link(name = "sendfile")]
@@ -3254,6 +3260,18 @@ extern "C" {
32543260
pub fn lgrp_root(cookie: ::lgrp_cookie_t) -> ::lgrp_id_t;
32553261
}
32563262

3263+
pub unsafe fn major(device: ::dev_t) -> ::major_t {
3264+
__major(NEWDEV, device)
3265+
}
3266+
3267+
pub unsafe fn minor(device: ::dev_t) -> ::minor_t {
3268+
__minor(NEWDEV, device)
3269+
}
3270+
3271+
pub unsafe fn makedev(maj: ::major_t, min: ::minor_t) -> ::dev_t {
3272+
__makedev(NEWDEV, maj, min)
3273+
}
3274+
32573275
mod compat;
32583276
pub use self::compat::*;
32593277

0 commit comments

Comments
 (0)