@@ -1308,3 +1308,67 @@ fn test_getpeereid_invalid_fd() {
13081308 // getpeereid is not POSIX, so error codes are inconsistent between different Unices.
13091309 getpeereid ( -1 ) . expect_err ( "assertion failed" ) ;
13101310}
1311+
1312+ #[ test]
1313+ fn test_faccessat_none_not_existing ( ) {
1314+ use nix:: fcntl:: AtFlags ;
1315+ let tempdir = tempfile:: tempdir ( ) . unwrap ( ) ;
1316+ let dir = tempdir. path ( ) . join ( "does_not_exist.txt" ) ;
1317+ assert_eq ! (
1318+ faccessat( None , & dir, AccessFlags :: F_OK , AtFlags :: empty( ) )
1319+ . err( )
1320+ . unwrap( ) ,
1321+ Errno :: ENOENT
1322+ ) ;
1323+ }
1324+
1325+ #[ test]
1326+ fn test_faccessat_not_existing ( ) {
1327+ use nix:: fcntl:: AtFlags ;
1328+ let tempdir = tempfile:: tempdir ( ) . unwrap ( ) ;
1329+ let dirfd = open ( tempdir. path ( ) , OFlag :: empty ( ) , Mode :: empty ( ) ) . unwrap ( ) ;
1330+ let not_exist_file = "does_not_exist.txt" ;
1331+ assert_eq ! (
1332+ faccessat(
1333+ Some ( dirfd) ,
1334+ not_exist_file,
1335+ AccessFlags :: F_OK ,
1336+ AtFlags :: empty( )
1337+ )
1338+ . err( )
1339+ . unwrap( ) ,
1340+ Errno :: ENOENT
1341+ ) ;
1342+ }
1343+
1344+ #[ test]
1345+ fn test_faccessat_none_file_exists ( ) {
1346+ use nix:: fcntl:: AtFlags ;
1347+ let tempdir = tempfile:: tempdir ( ) . unwrap ( ) ;
1348+ let path = tempdir. path ( ) . join ( "does_exist.txt" ) ;
1349+ let _file = File :: create ( path. clone ( ) ) . unwrap ( ) ;
1350+ assert ! ( faccessat(
1351+ None ,
1352+ & path,
1353+ AccessFlags :: R_OK | AccessFlags :: W_OK ,
1354+ AtFlags :: empty( )
1355+ )
1356+ . is_ok( ) ) ;
1357+ }
1358+
1359+ #[ test]
1360+ fn test_faccessat_file_exists ( ) {
1361+ use nix:: fcntl:: AtFlags ;
1362+ let tempdir = tempfile:: tempdir ( ) . unwrap ( ) ;
1363+ let dirfd = open ( tempdir. path ( ) , OFlag :: empty ( ) , Mode :: empty ( ) ) . unwrap ( ) ;
1364+ let exist_file = "does_exist.txt" ;
1365+ let path = tempdir. path ( ) . join ( exist_file) ;
1366+ let _file = File :: create ( path. clone ( ) ) . unwrap ( ) ;
1367+ assert ! ( faccessat(
1368+ Some ( dirfd) ,
1369+ & path,
1370+ AccessFlags :: R_OK | AccessFlags :: W_OK ,
1371+ AtFlags :: empty( )
1372+ )
1373+ . is_ok( ) ) ;
1374+ }
0 commit comments