...
1 package sysfs
2
3 import (
4 "io/fs"
5
6 experimentalsys "github.com/tetratelabs/wazero/experimental/sys"
7 )
8
9 type ReadFS struct {
10 experimentalsys.FS
11 }
12
13
14 func (r *ReadFS) OpenFile(path string, flag experimentalsys.Oflag, perm fs.FileMode) (experimentalsys.File, experimentalsys.Errno) {
15
16 switch flag & (experimentalsys.O_RDONLY | experimentalsys.O_WRONLY | experimentalsys.O_RDWR) {
17 case experimentalsys.O_WRONLY, experimentalsys.O_RDWR:
18
19 if flag&experimentalsys.O_DIRECTORY != 0 {
20 return nil, experimentalsys.EISDIR
21 }
22 return nil, experimentalsys.ENOSYS
23 default:
24 }
25
26 f, errno := r.FS.OpenFile(path, flag, perm)
27 if errno != 0 {
28 return nil, errno
29 }
30 return &readFile{f}, 0
31 }
32
33
34 func (r *ReadFS) Mkdir(path string, perm fs.FileMode) experimentalsys.Errno {
35 return experimentalsys.EROFS
36 }
37
38
39 func (r *ReadFS) Chmod(path string, perm fs.FileMode) experimentalsys.Errno {
40 return experimentalsys.EROFS
41 }
42
43
44 func (r *ReadFS) Rename(from, to string) experimentalsys.Errno {
45 return experimentalsys.EROFS
46 }
47
48
49 func (r *ReadFS) Rmdir(path string) experimentalsys.Errno {
50 return experimentalsys.EROFS
51 }
52
53
54 func (r *ReadFS) Link(_, _ string) experimentalsys.Errno {
55 return experimentalsys.EROFS
56 }
57
58
59 func (r *ReadFS) Symlink(_, _ string) experimentalsys.Errno {
60 return experimentalsys.EROFS
61 }
62
63
64 func (r *ReadFS) Unlink(path string) experimentalsys.Errno {
65 return experimentalsys.EROFS
66 }
67
68
69 func (r *ReadFS) Utimens(path string, atim, mtim int64) experimentalsys.Errno {
70 return experimentalsys.EROFS
71 }
72
73
74 var _ experimentalsys.File = (*readFile)(nil)
75
76 type readFile struct {
77 experimentalsys.File
78 }
79
80
81 func (r *readFile) Write([]byte) (int, experimentalsys.Errno) {
82 return 0, r.writeErr()
83 }
84
85
86 func (r *readFile) Pwrite([]byte, int64) (n int, errno experimentalsys.Errno) {
87 return 0, r.writeErr()
88 }
89
90
91 func (r *readFile) Truncate(int64) experimentalsys.Errno {
92 return r.writeErr()
93 }
94
95
96 func (r *readFile) Sync() experimentalsys.Errno {
97 return experimentalsys.EBADF
98 }
99
100
101 func (r *readFile) Datasync() experimentalsys.Errno {
102 return experimentalsys.EBADF
103 }
104
105
106 func (r *readFile) Utimens(int64, int64) experimentalsys.Errno {
107 return experimentalsys.EBADF
108 }
109
110 func (r *readFile) writeErr() experimentalsys.Errno {
111 if isDir, errno := r.IsDir(); errno != 0 {
112 return errno
113 } else if isDir {
114 return experimentalsys.EISDIR
115 }
116 return experimentalsys.EBADF
117 }
118
View as plain text