11use nix:: fcntl:: { openat, open, OFlag , O_RDONLY , readlink, readlinkat} ;
22use nix:: sys:: stat:: Mode ;
3- use nix:: unistd:: { close, read} ;
3+ use nix:: unistd:: { close, read, symlink , symlinkat } ;
44use tempdir:: TempDir ;
55use tempfile:: NamedTempFile ;
66use std:: io:: prelude:: * ;
7- use std:: os:: unix:: fs;
87
98#[ test]
109fn test_openat ( ) {
@@ -30,19 +29,29 @@ fn test_openat() {
3029
3130#[ test]
3231fn test_readlink ( ) {
33- let tempdir = TempDir :: new ( "nix-test_readdir" )
32+ let tempdir = TempDir :: new ( "nix-test_readdlink" )
33+ . unwrap_or_else ( |e| panic ! ( "tempdir failed: {}" , e) ) ;
34+ let src = tempdir. path ( ) . join ( "a" ) ;
35+ let dst = tempdir. path ( ) . join ( "b" ) ;
36+ symlink ( src. as_path ( ) , dst. as_path ( ) ) . unwrap ( ) ;
37+
38+ let mut buf = vec ! [ 0 ; src. to_str( ) . unwrap( ) . len( ) + 1 ] ;
39+ assert_eq ! ( readlink( & dst, & mut buf) . unwrap( ) . to_str( ) . unwrap( ) ,
40+ src. to_str( ) . unwrap( ) ) ;
41+ }
42+
43+ #[ test]
44+ fn test_readlinkat ( ) {
45+ let tempdir = TempDir :: new ( "nix-test_readlinkat" )
3446 . unwrap_or_else ( |e| panic ! ( "tempdir failed: {}" , e) ) ;
3547 let src = tempdir. path ( ) . join ( "a" ) ;
3648 let dst = tempdir. path ( ) . join ( "b" ) ;
37- println ! ( "a: {:?}, b: {:?}" , & src, & dst) ;
38- fs:: symlink ( & src. as_path ( ) , & dst. as_path ( ) ) . unwrap ( ) ;
3949 let dirfd = open ( tempdir. path ( ) ,
4050 OFlag :: empty ( ) ,
4151 Mode :: empty ( ) ) . unwrap ( ) ;
52+ symlinkat ( src. as_path ( ) , dirfd, dst. file_name ( ) . unwrap ( ) ) . unwrap ( ) ;
4253
4354 let mut buf = vec ! [ 0 ; src. to_str( ) . unwrap( ) . len( ) + 1 ] ;
44- assert_eq ! ( readlink( & dst, & mut buf) . unwrap( ) . to_str( ) . unwrap( ) ,
45- src. to_str( ) . unwrap( ) ) ;
4655 assert_eq ! ( readlinkat( dirfd, "b" , & mut buf) . unwrap( ) . to_str( ) . unwrap( ) ,
4756 src. to_str( ) . unwrap( ) ) ;
4857}
0 commit comments