Skip to content

Commit

Permalink
Add makedev for the BSDs
Browse files Browse the repository at this point in the history
Also, make Linux's makedev function safe and const.
  • Loading branch information
asomers committed Aug 26, 2022
1 parent 75dd59e commit f776f0e
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 11 deletions.
9 changes: 9 additions & 0 deletions src/unix/bsd/freebsdlike/dragonfly/mod.rs
Expand Up @@ -1571,6 +1571,15 @@ safe_f! {
pub {const} fn WIFSIGNALED(status: ::c_int) -> bool {
(status & 0o177) != 0o177 && (status & 0o177) != 0
}

pub {const} fn makedev(major: ::c_uint, minor: ::c_uint) -> ::dev_t {
let major = major as ::dev_t;
let minor = minor as ::dev_t;
let mut dev = 0;
dev |= major << 8;
dev |= minor;
dev
}
}

extern "C" {
Expand Down
11 changes: 11 additions & 0 deletions src/unix/bsd/freebsdlike/freebsd/mod.rs
Expand Up @@ -3840,6 +3840,17 @@ safe_f! {
pub {const} fn WIFSIGNALED(status: ::c_int) -> bool {
(status & 0o177) != 0o177 && (status & 0o177) != 0 && status != 0x13
}

pub {const} fn makedev(major: ::c_uint, minor: ::c_uint) -> ::dev_t {
let major = major as ::dev_t;
let minor = minor as ::dev_t;
let mut dev = 0;
dev |= (major & 0xffffff00) << 32;
dev |= (major & 0x000000ff) << 8;
dev |= (minor & 0x0000ff00) << 24;
dev |= (minor & 0xffff00ff) << 0;
dev
}
}

cfg_if! {
Expand Down
10 changes: 10 additions & 0 deletions src/unix/bsd/netbsdlike/netbsd/mod.rs
Expand Up @@ -2351,6 +2351,16 @@ safe_f! {
pub {const} fn WIFCONTINUED(status: ::c_int) -> bool {
status == 0xffff
}

pub {const} fn makedev(major: ::c_uint, minor: ::c_uint) -> ::dev_t {
let major = major as ::dev_t;
let minor = minor as ::dev_t;
let mut dev = 0;
dev |= (major << 8) & 0x000ff00;
dev |= (minor << 12) & 0xfff00000;
dev |= minor & 0xff;
dev
}
}

extern "C" {
Expand Down
10 changes: 10 additions & 0 deletions src/unix/bsd/netbsdlike/openbsd/mod.rs
Expand Up @@ -1695,6 +1695,16 @@ safe_f! {
pub {const} fn WIFCONTINUED(status: ::c_int) -> bool {
(status & 0o177777) == 0o177777
}

pub {const} fn makedev(major: ::c_uint, minor: ::c_uint) -> ::dev_t {
let major = major as ::dev_t;
let minor = minor as ::dev_t;
let mut dev = 0;
dev |= (major & 0xff) << 8;
dev |= (minor & 0xff);
dev |= (minor & 0xffff00) << 8;
dev
}
}

extern "C" {
Expand Down
24 changes: 13 additions & 11 deletions src/unix/linux_like/linux/mod.rs
Expand Up @@ -3351,17 +3351,6 @@ f! {
minor as ::c_uint
}

pub fn makedev(major: ::c_uint, minor: ::c_uint) -> ::dev_t {
let major = major as ::dev_t;
let minor = minor as ::dev_t;
let mut dev = 0;
dev |= (major & 0x00000fff) << 8;
dev |= (major & 0xfffff000) << 32;
dev |= (minor & 0x000000ff) << 0;
dev |= (minor & 0xffffff00) << 12;
dev
}

pub fn IPTOS_TOS(tos: u8) -> u8 {
tos & IPTOS_TOS_MASK
}
Expand Down Expand Up @@ -3403,6 +3392,19 @@ f! {
}
}

safe_f! {
pub {const} fn makedev(major: ::c_uint, minor: ::c_uint) -> ::dev_t {
let major = major as ::dev_t;
let minor = minor as ::dev_t;
let mut dev = 0;
dev |= (major & 0x00000fff) << 8;
dev |= (major & 0xfffff000) << 32;
dev |= (minor & 0x000000ff) << 0;
dev |= (minor & 0xffffff00) << 12;
dev
}
}

cfg_if! {
if #[cfg(not(target_env = "uclibc"))] {
extern "C" {
Expand Down

0 comments on commit f776f0e

Please sign in to comment.