@@ -14,6 +14,7 @@ use crate::fs::Dev;
1414 target_os = "aix" ,
1515 target_os = "android" ,
1616 target_os = "emscripten" ,
17+ target_os = "redox" ,
1718) ) ) ]
1819#[ inline]
1920pub ( crate ) fn makedev ( maj : u32 , min : u32 ) -> Dev {
@@ -44,6 +45,17 @@ pub(crate) fn makedev(maj: u32, min: u32) -> Dev {
4445 | ( u64:: from ( min) & 0x0000_00ff_u64 )
4546}
4647
48+ #[ cfg( target_os = "redox" ) ]
49+ #[ inline]
50+ pub ( crate ) fn makedev ( maj : u32 , min : u32 ) -> Dev {
51+ // Redox's makedev is reportedly similar to 32-bit Android's but the return
52+ // type is signed.
53+ ( ( i64:: from ( maj) & 0xffff_f000_i64 ) << 32 )
54+ | ( ( i64:: from ( maj) & 0x0000_0fff_i64 ) << 8 )
55+ | ( ( i64:: from ( min) & 0xffff_ff00_i64 ) << 12 )
56+ | ( i64:: from ( min) & 0x0000_00ff_i64 )
57+ }
58+
4759#[ cfg( target_os = "emscripten" ) ]
4860#[ inline]
4961pub ( crate ) fn makedev ( maj : u32 , min : u32 ) -> Dev {
@@ -70,7 +82,8 @@ pub(crate) fn makedev(maj: u32, min: u32) -> Dev {
7082 freebsdlike,
7183 target_os = "android" ,
7284 target_os = "emscripten" ,
73- target_os = "netbsd"
85+ target_os = "netbsd" ,
86+ target_os = "redox"
7487) ) ) ]
7588#[ inline]
7689pub ( crate ) fn major ( dev : Dev ) -> u32 {
@@ -89,7 +102,10 @@ pub(crate) fn major(dev: Dev) -> u32 {
89102 ( unsafe { c:: major ( dev) } ) as u32
90103}
91104
92- #[ cfg( all( target_os = "android" , target_pointer_width = "32" ) ) ]
105+ #[ cfg( any(
106+ all( target_os = "android" , target_pointer_width = "32" ) ,
107+ target_os = "redox"
108+ ) ) ]
93109#[ inline]
94110pub ( crate ) fn major ( dev : Dev ) -> u32 {
95111 // 32-bit Android's `dev_t` is 32-bit, but its `st_dev` is 64-bit, so we do
@@ -109,7 +125,8 @@ pub(crate) fn major(dev: Dev) -> u32 {
109125 freebsdlike,
110126 target_os = "android" ,
111127 target_os = "emscripten" ,
112- target_os = "netbsd"
128+ target_os = "netbsd" ,
129+ target_os = "redox" ,
113130) ) ) ]
114131#[ inline]
115132pub ( crate ) fn minor ( dev : Dev ) -> u32 {
@@ -128,7 +145,10 @@ pub(crate) fn minor(dev: Dev) -> u32 {
128145 ( unsafe { c:: minor ( dev) } ) as u32
129146}
130147
131- #[ cfg( all( target_os = "android" , target_pointer_width = "32" ) ) ]
148+ #[ cfg( any(
149+ all( target_os = "android" , target_pointer_width = "32" ) ,
150+ target_os = "redox"
151+ ) ) ]
132152#[ inline]
133153pub ( crate ) fn minor ( dev : Dev ) -> u32 {
134154 // 32-bit Android's `dev_t` is 32-bit, but its `st_dev` is 64-bit, so we do
0 commit comments