1
1
use std:: { env, process} ;
2
- use wasi_tests:: { assert_errno, create_tmp_dir, open_scratch_directory, TESTCONFIG } ;
2
+ use wasi_tests:: { assert_errno, create_tmp_dir, open_scratch_directory} ;
3
3
4
4
unsafe fn test_path_filestat ( dir_fd : wasi:: Fd ) {
5
5
let mut fdstat = wasi:: fd_fdstat_get ( dir_fd) . expect ( "fd_fdstat_get" ) ;
@@ -9,69 +9,46 @@ unsafe fn test_path_filestat(dir_fd: wasi::Fd) {
9
9
"the scratch directory should have RIGHT_PATH_FILESTAT_GET as base right" ,
10
10
) ;
11
11
12
- let fdflags = if TESTCONFIG . support_fdflags_sync ( ) {
13
- wasi:: FDFLAGS_APPEND | wasi:: FDFLAGS_SYNC
14
- } else {
15
- wasi:: FDFLAGS_APPEND
12
+ // Create a file in the scratch directory.
13
+ let open_file = |fdflags| -> Result < wasi:: Fd , wasi:: Errno > {
14
+ let rights = wasi:: RIGHTS_FD_READ | wasi:: RIGHTS_FD_WRITE |
15
+ wasi:: RIGHTS_PATH_FILESTAT_GET ;
16
+ return wasi:: path_open ( dir_fd, 0 , "file" , wasi:: OFLAGS_CREAT , rights, 0 ,
17
+ fdflags) ;
16
18
} ;
17
19
18
- // Create a file in the scratch directory.
19
- let file_fd = wasi:: path_open (
20
- dir_fd,
21
- 0 ,
22
- "file" ,
23
- wasi:: OFLAGS_CREAT ,
24
- wasi:: RIGHTS_FD_READ | wasi:: RIGHTS_FD_WRITE | wasi:: RIGHTS_PATH_FILESTAT_GET ,
25
- 0 ,
26
- // Pass some flags for later retrieval
27
- fdflags,
28
- )
29
- . expect ( "opening a file" ) ;
20
+ let ( file_fd, fdflags) =
21
+ match open_file ( wasi:: FDFLAGS_APPEND | wasi:: FDFLAGS_SYNC ) {
22
+ Ok ( fd) => { ( fd, wasi:: FDFLAGS_APPEND | wasi:: FDFLAGS_SYNC ) }
23
+ Err ( wasi:: ERRNO_NOTSUP ) => {
24
+ ( open_file ( wasi:: FDFLAGS_APPEND ) . expect ( "opening file" ) ,
25
+ wasi:: FDFLAGS_APPEND )
26
+ }
27
+ Err ( err) => {
28
+ eprintln ! ( "error opening file: {}" , err) ;
29
+ process:: exit ( 1 ) ;
30
+ }
31
+ } ;
32
+
30
33
assert ! (
31
34
file_fd > libc:: STDERR_FILENO as wasi:: Fd ,
32
35
"file descriptor range check" ,
33
36
) ;
34
37
35
38
fdstat = wasi:: fd_fdstat_get ( file_fd) . expect ( "fd_fdstat_get" ) ;
36
- assert_eq ! (
37
- fdstat. fs_rights_base & wasi:: RIGHTS_PATH_FILESTAT_GET ,
38
- 0 ,
39
- "files shouldn't have rights for path_* syscalls even if manually given" ,
40
- ) ;
41
- assert_eq ! (
42
- fdstat. fs_rights_inheriting & wasi:: RIGHTS_PATH_FILESTAT_GET ,
43
- 0 ,
44
- "files shouldn't have rights for path_* syscalls even if manually given" ,
45
- ) ;
46
39
assert_eq ! (
47
40
fdstat. fs_flags & wasi:: FDFLAGS_APPEND ,
48
41
wasi:: FDFLAGS_APPEND ,
49
42
"file should have the APPEND fdflag used to create the file"
50
43
) ;
51
- if TESTCONFIG . support_fdflags_sync ( ) {
44
+ if ( fdflags & wasi :: FDFLAGS_SYNC ) != 0 {
52
45
assert_eq ! (
53
46
fdstat. fs_flags & wasi:: FDFLAGS_SYNC ,
54
47
wasi:: FDFLAGS_SYNC ,
55
48
"file should have the SYNC fdflag used to create the file"
56
49
) ;
57
50
}
58
51
59
- if !TESTCONFIG . support_fdflags_sync ( ) {
60
- assert_errno ! (
61
- wasi:: path_open(
62
- dir_fd,
63
- 0 ,
64
- "file" ,
65
- 0 ,
66
- wasi:: RIGHTS_FD_READ | wasi:: RIGHTS_FD_WRITE | wasi:: RIGHTS_PATH_FILESTAT_GET ,
67
- 0 ,
68
- wasi:: FDFLAGS_SYNC ,
69
- )
70
- . expect_err( "FDFLAGS_SYNC not supported by platform" ) ,
71
- wasi:: ERRNO_NOTSUP
72
- ) ;
73
- }
74
-
75
52
// Check file size
76
53
let file_stat = wasi:: path_filestat_get ( dir_fd, 0 , "file" ) . expect ( "reading file stats" ) ;
77
54
assert_eq ! ( file_stat. size, 0 , "file size should be 0" ) ;
0 commit comments