1
- use nix:: fcntl:: { openat, open, OFlag , readlink, readlinkat} ;
1
+ use nix:: Error ;
2
+ use nix:: errno:: * ;
3
+ use nix:: fcntl:: { openat, open, OFlag , readlink, readlinkat, renameat} ;
2
4
use nix:: sys:: stat:: Mode ;
3
5
use nix:: unistd:: { close, read} ;
4
6
use tempfile:: { self , NamedTempFile } ;
7
+ use std:: fs:: File ;
5
8
use std:: io:: prelude:: * ;
6
9
use std:: os:: unix:: fs;
7
10
@@ -27,6 +30,22 @@ fn test_openat() {
27
30
close ( dirfd) . unwrap ( ) ;
28
31
}
29
32
33
+ #[ test]
34
+ fn test_renameat ( ) {
35
+ let old_dir = tempfile:: tempdir ( ) . unwrap ( ) ;
36
+ let old_dirfd = open ( old_dir. path ( ) , OFlag :: empty ( ) , Mode :: empty ( ) ) . unwrap ( ) ;
37
+ let old_path = old_dir. path ( ) . join ( "old" ) ;
38
+ File :: create ( & old_path) . unwrap ( ) ;
39
+ let new_dir = tempfile:: tempdir ( ) . unwrap ( ) ;
40
+ let new_dirfd = open ( new_dir. path ( ) , OFlag :: empty ( ) , Mode :: empty ( ) ) . unwrap ( ) ;
41
+ renameat ( Some ( old_dirfd) , "old" , Some ( new_dirfd) , "new" ) . unwrap ( ) ;
42
+ assert_eq ! ( renameat( Some ( old_dirfd) , "old" , Some ( new_dirfd) , "new" ) . unwrap_err( ) ,
43
+ Error :: Sys ( Errno :: ENOENT ) ) ;
44
+ close ( old_dirfd) . unwrap ( ) ;
45
+ close ( new_dirfd) . unwrap ( ) ;
46
+ assert ! ( new_dir. path( ) . join( "new" ) . exists( ) ) ;
47
+ }
48
+
30
49
#[ test]
31
50
fn test_readlink ( ) {
32
51
let tempdir = tempfile:: tempdir ( ) . unwrap ( ) ;
0 commit comments