Skip to content

Commit 56ec0d1

Browse files
authored
Enable makedev on more platforms. (#548)
* Enable makedev on more platforms. Enable the `makedev` function on freebsd, netbsd, opensd, dragonfly, ios, and macos. And handle `makedev` being `unsafe` on AIX. * Re-enable makedev on apple, netbsdlike, and freebsdlike.
1 parent f1418c7 commit 56ec0d1

File tree

6 files changed

+49
-38
lines changed

6 files changed

+49
-38
lines changed

src/backend/libc/fs/makedev.rs

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@
22
use super::super::c;
33
use crate::fs::Dev;
44

5-
#[cfg(not(any(target_os = "android", target_os = "emscripten")))]
5+
#[cfg(not(any(
6+
apple,
7+
target_os = "aix",
8+
target_os = "android",
9+
target_os = "emscripten",
10+
)))]
611
#[inline]
712
pub(crate) fn makedev(maj: u32, min: u32) -> Dev {
813
c::makedev(maj, min)
@@ -11,7 +16,6 @@ pub(crate) fn makedev(maj: u32, min: u32) -> Dev {
1116
#[cfg(all(target_os = "android", not(target_pointer_width = "32")))]
1217
#[inline]
1318
pub(crate) fn makedev(maj: u32, min: u32) -> Dev {
14-
// Android's `makedev` oddly has signed argument types.
1519
c::makedev(maj, min)
1620
}
1721

@@ -33,7 +37,27 @@ pub(crate) fn makedev(maj: u32, min: u32) -> Dev {
3337
Dev::from(c::makedev(maj, min))
3438
}
3539

36-
#[cfg(not(any(target_os = "android", target_os = "emscripten")))]
40+
#[cfg(apple)]
41+
#[inline]
42+
pub(crate) fn makedev(maj: u32, min: u32) -> Dev {
43+
// Apple's `makedev` oddly has signed argument types and is `unsafe`.
44+
unsafe { c::makedev(maj as i32, min as i32) }
45+
}
46+
47+
#[cfg(target_os = "aix")]
48+
#[inline]
49+
pub(crate) fn makedev(maj: u32, min: u32) -> Dev {
50+
// AIX's `makedev` oddly is `unsafe`.
51+
unsafe { c::makedev(maj, min) }
52+
}
53+
54+
#[cfg(not(any(
55+
apple,
56+
freebsdlike,
57+
netbsdlike,
58+
target_os = "android",
59+
target_os = "emscripten",
60+
)))]
3761
#[inline]
3862
pub(crate) fn major(dev: Dev) -> u32 {
3963
unsafe { c::major(dev) }
@@ -61,7 +85,13 @@ pub(crate) fn major(dev: Dev) -> u32 {
6185
unsafe { c::major(dev as u32) }
6286
}
6387

64-
#[cfg(not(any(target_os = "android", target_os = "emscripten")))]
88+
#[cfg(not(any(
89+
apple,
90+
freebsdlike,
91+
netbsdlike,
92+
target_os = "android",
93+
target_os = "emscripten",
94+
)))]
6595
#[inline]
6696
pub(crate) fn minor(dev: Dev) -> u32 {
6797
unsafe { c::minor(dev) }

src/backend/libc/fs/mod.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,8 @@ pub(crate) mod dir;
33
#[cfg(any(target_os = "android", target_os = "linux"))]
44
pub mod inotify;
55
#[cfg(not(any(
6-
target_os = "dragonfly",
76
target_os = "haiku",
8-
target_os = "freebsd",
97
target_os = "illumos",
10-
target_os = "ios",
11-
target_os = "macos",
12-
target_os = "netbsd",
13-
target_os = "openbsd",
148
target_os = "redox",
159
target_os = "solaris",
1610
target_os = "wasi",

src/fs/makedev.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ pub fn makedev(maj: u32, min: u32) -> Dev {
1818
/// - [Linux]
1919
///
2020
/// [Linux]: https://man7.org/linux/man-pages/man3/minor.3.html
21+
#[cfg(not(bsd))]
2122
#[inline]
2223
pub fn minor(dev: Dev) -> u32 {
2324
backend::fs::makedev::minor(dev)
@@ -29,6 +30,7 @@ pub fn minor(dev: Dev) -> u32 {
2930
/// - [Linux]
3031
///
3132
/// [Linux]: https://man7.org/linux/man-pages/man3/major.3.html
33+
#[cfg(not(bsd))]
3234
#[inline]
3335
pub fn major(dev: Dev) -> u32 {
3436
backend::fs::makedev::major(dev)

src/fs/mod.rs

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,7 @@ pub(crate) mod fd;
2828
mod file_type;
2929
#[cfg(apple)]
3030
mod getpath;
31-
#[cfg(not(any(
32-
apple,
33-
freebsdlike,
34-
netbsdlike,
35-
solarish,
36-
target_os = "haiku",
37-
target_os = "redox",
38-
target_os = "wasi",
39-
)))]
31+
#[cfg(not(any(solarish, target_os = "haiku", target_os = "redox", target_os = "wasi")))]
4032
mod makedev;
4133
#[cfg(any(target_os = "android", target_os = "freebsd", target_os = "linux"))]
4234
mod memfd_create;
@@ -97,16 +89,8 @@ pub use fd::*;
9789
pub use file_type::FileType;
9890
#[cfg(apple)]
9991
pub use getpath::getpath;
100-
#[cfg(not(any(
101-
apple,
102-
freebsdlike,
103-
netbsdlike,
104-
solarish,
105-
target_os = "haiku",
106-
target_os = "redox",
107-
target_os = "wasi",
108-
)))]
109-
pub use makedev::{major, makedev, minor};
92+
#[cfg(not(any(solarish, target_os = "haiku", target_os = "redox", target_os = "wasi")))]
93+
pub use makedev::*;
11094
#[cfg(any(target_os = "android", target_os = "freebsd", target_os = "linux"))]
11195
pub use memfd_create::{memfd_create, MemfdFlags};
11296
#[cfg(any(target_os = "android", target_os = "linux"))]

tests/fs/main.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,8 @@ mod futimens;
1616
mod invalid_offset;
1717
mod long_paths;
1818
#[cfg(not(any(
19-
target_os = "dragonfly",
20-
target_os = "freebsd",
2119
target_os = "haiku",
2220
target_os = "illumos",
23-
target_os = "ios",
24-
target_os = "macos",
25-
target_os = "netbsd",
26-
target_os = "openbsd",
2721
target_os = "redox",
2822
target_os = "solaris",
2923
target_os = "wasi",

tests/fs/makedev.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
1-
use rustix::fs::{major, makedev, minor};
1+
use rustix::fs::makedev;
2+
#[cfg(not(bsd))]
3+
use rustix::fs::{major, minor};
24

35
#[test]
46
fn makedev_roundtrip() {
57
let maj = 0x2324_2526;
68
let min = 0x6564_6361;
79
let dev = makedev(maj, min);
8-
assert_eq!(maj, major(dev));
9-
assert_eq!(min, minor(dev));
10+
#[cfg(not(bsd))]
11+
{
12+
assert_eq!(maj, major(dev));
13+
assert_eq!(min, minor(dev));
14+
}
15+
#[cfg(bsd)]
16+
let _ = dev;
1017
}

0 commit comments

Comments
 (0)