1
- use std:: ffi:: CString ;
2
1
use std:: io:: Read ;
3
2
use std:: path:: PathBuf ;
3
+ use std:: process:: Command ;
4
4
use std:: { env, fs} ;
5
5
6
6
use libc;
7
7
8
8
use kernel_module_testlib:: with_kernel_module;
9
9
10
- fn get_device_number ( ) -> libc:: dev_t {
10
+ fn get_device_major_number ( ) -> libc:: dev_t {
11
11
let devices = fs:: read_to_string ( "/proc/devices" ) . unwrap ( ) ;
12
12
let dev_no_line = devices
13
13
. lines ( )
@@ -31,31 +31,40 @@ struct UnlinkOnDrop<'a> {
31
31
32
32
impl Drop for UnlinkOnDrop < ' _ > {
33
33
fn drop ( & mut self ) {
34
- fs:: remove_file ( self . path ) . unwrap ( ) ;
34
+ Command :: new ( "sudo" )
35
+ . arg ( "rm" )
36
+ . arg ( self . path . to_str ( ) . unwrap ( ) )
37
+ . status ( )
38
+ . unwrap ( ) ;
35
39
}
36
40
}
37
41
38
- fn mknod ( path : & PathBuf , mode : u32 , device_number : libc:: dev_t ) -> UnlinkOnDrop {
39
- let path_cstr = CString :: new ( path. to_str ( ) . unwrap ( ) . as_bytes ( ) . to_vec ( ) ) . unwrap ( ) ;
40
- let result = unsafe { libc:: mknod ( path_cstr. as_ptr ( ) , mode, device_number) } ;
41
- assert_eq ! ( result, 0 ) ;
42
+ fn mknod ( path : & PathBuf , device_number : libc:: dev_t ) -> UnlinkOnDrop {
43
+ Command :: new ( "sudo" )
44
+ . arg ( "mknod" )
45
+ . arg ( path. to_str ( ) . unwrap ( ) )
46
+ . arg ( "c" )
47
+ . arg ( device_number. to_string ( ) )
48
+ . arg ( "0" )
49
+ . status ( )
50
+ . unwrap ( ) ;
42
51
return UnlinkOnDrop { path } ;
43
52
}
44
53
45
54
#[ test]
46
55
fn test_mknod ( ) {
47
56
with_kernel_module ( || {
48
- let device_number = get_device_number ( ) ;
49
- mknod ( & temporary_file_path ( ) , 0o600 , device_number) ;
57
+ let device_number = get_device_major_number ( ) ;
58
+ mknod ( & temporary_file_path ( ) , device_number) ;
50
59
} ) ;
51
60
}
52
61
53
62
#[ test]
54
63
fn test_read ( ) {
55
64
with_kernel_module ( || {
56
- let device_number = get_device_number ( ) ;
65
+ let device_number = get_device_major_number ( ) ;
57
66
let p = temporary_file_path ( ) ;
58
- let _u = mknod ( & p, 0o600 , device_number) ;
67
+ let _u = mknod ( & p, device_number) ;
59
68
60
69
let mut f = fs:: File :: open ( & p) . unwrap ( ) ;
61
70
let mut data = [ 0 ; 12 ] ;
0 commit comments