11use std:: { env, process} ;
2- use wasi_tests:: { assert_errno, create_file, create_tmp_dir, open_scratch_directory, TESTCONFIG } ;
2+ use wasi_tests:: {
3+ assert_errno, create_file, create_tmp_dir, open_scratch_directory, supports_rights, TESTCONFIG ,
4+ } ;
35
46const TEST_RIGHTS : wasi:: Rights = wasi:: RIGHTS_FD_READ
57 | wasi:: RIGHTS_PATH_LINK_SOURCE
@@ -43,20 +45,24 @@ fn filestats_assert_eq(left: wasi::Filestat, right: wasi::Filestat) {
4345
4446// This is temporary until `wasi` implements `Debug` and `PartialEq` for
4547// `wasi::Fdstat`.
46- fn fdstats_assert_eq ( left : wasi:: Fdstat , right : wasi:: Fdstat ) {
48+ fn fdstats_assert_eq ( left : wasi:: Fdstat , right : wasi:: Fdstat , supports_rights : bool ) {
4749 assert_eq ! ( left. fs_flags, right. fs_flags, "fs_flags should be equal" ) ;
4850 assert_eq ! (
4951 left. fs_filetype, right. fs_filetype,
5052 "fs_filetype should be equal"
5153 ) ;
52- assert_eq ! (
53- left. fs_rights_base, right. fs_rights_base,
54- "fs_rights_base should be equal"
55- ) ;
56- assert_eq ! (
57- left. fs_rights_inheriting, right. fs_rights_inheriting,
58- "fs_rights_inheriting should be equal"
59- ) ;
54+
55+ // Only tests rights if the host in general supports rights.
56+ if supports_rights {
57+ assert_eq ! (
58+ left. fs_rights_base, right. fs_rights_base,
59+ "fs_rights_base should be equal"
60+ ) ;
61+ assert_eq ! (
62+ left. fs_rights_inheriting, right. fs_rights_inheriting,
63+ "fs_rights_inheriting should be equal"
64+ ) ;
65+ }
6066}
6167
6268unsafe fn check_rights ( orig_fd : wasi:: Fd , link_fd : wasi:: Fd ) {
@@ -68,7 +74,7 @@ unsafe fn check_rights(orig_fd: wasi::Fd, link_fd: wasi::Fd) {
6874 // Compare Fdstats
6975 let orig_fdstat = wasi:: fd_fdstat_get ( orig_fd) . expect ( "reading fdstat of the source" ) ;
7076 let link_fdstat = wasi:: fd_fdstat_get ( link_fd) . expect ( "reading fdstat of the link" ) ;
71- fdstats_assert_eq ( orig_fdstat, link_fdstat) ;
77+ fdstats_assert_eq ( orig_fdstat, link_fdstat, supports_rights ( orig_fd ) ) ;
7278}
7379
7480// Extra calls of fd_close are needed for Windows, which will not remove
0 commit comments