Skip to content

Commit dbdce80

Browse files
committed
Add major, minor, makedev functions
Only for Linux and Android currently, though they also exist on BSDs
1 parent eb637d2 commit dbdce80

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

src/unix/notbsd/android/mod.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,17 @@ f! {
525525
pub fn tcsendbreak(fd: ::c_int, duration: ::c_int) -> ::c_int {
526526
ioctl(fd, TCSBRKP, duration as *mut ::c_void)
527527
}
528+
pub fn major(dev: ::dev_t) -> ::c_int {
529+
((dev >> 8) & 0xfff) as ::c_int
530+
}
531+
pub fn minor(dev: ::dev_t) -> ::c_int {
532+
((dev & 0xff) | ((dev >> 12) & 0xfff00)) as ::c_int
533+
}
534+
pub fn makedev(ma: ::c_int, mi: ::c_int) -> ::dev_t {
535+
let ma = ma as ::dev_t;
536+
let mi = mi as ::dev_t;
537+
((ma & 0xfff) << 8) | (mi & 0xff) | ((mi & 0xfff00) << 12)
538+
}
528539
}
529540

530541
extern {

src/unix/notbsd/linux/mod.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,31 @@ f! {
475475
pub fn CPU_EQUAL(set1: &cpu_set_t, set2: &cpu_set_t) -> bool {
476476
set1.bits == set2.bits
477477
}
478+
479+
pub fn major(dev: ::dev_t) -> ::c_uint {
480+
let mut major = 0;
481+
major |= (dev & 0x00000000000fff00) >> 8;
482+
major |= (dev & 0xfffff00000000000) >> 32;
483+
major as ::c_uint
484+
}
485+
486+
pub fn minor(dev: ::dev_t) -> ::c_uint {
487+
let mut minor = 0;
488+
minor |= (dev & 0xfffff00000000000) >> 0;
489+
minor |= (dev & 0x00000ffffff00000) >> 12;
490+
minor as ::c_uint
491+
}
492+
493+
pub fn makedev(major: ::c_uint, minor: ::c_uint) -> ::dev_t {
494+
let major = major as ::dev_t;
495+
let minor = minor as ::dev_t;
496+
let mut dev = 0;
497+
dev |= (major & 0x00000fff) << 8;
498+
dev |= (major & 0xfffff000) << 32;
499+
dev |= (minor & 0x000000ff) << 0;
500+
dev |= (minor & 0xffffff00) << 12;
501+
dev
502+
}
478503
}
479504

480505
extern {

0 commit comments

Comments
 (0)