github.com/tetratelabs/wazero@v1.2.1/internal/fsapi/unimplemented.go (about) 1 package fsapi 2 3 import ( 4 "io/fs" 5 "syscall" 6 "time" 7 ) 8 9 // UnimplementedFS is an FS that returns syscall.ENOSYS for all functions, 10 // This should be embedded to have forward compatible implementations. 11 type UnimplementedFS struct{} 12 13 // String implements fmt.Stringer 14 func (UnimplementedFS) String() string { 15 return "Unimplemented:/" 16 } 17 18 // Open implements the same method as documented on fs.FS 19 func (UnimplementedFS) Open(name string) (fs.File, error) { 20 return nil, &fs.PathError{Op: "open", Path: name, Err: syscall.ENOSYS} 21 } 22 23 // OpenFile implements FS.OpenFile 24 func (UnimplementedFS) OpenFile(path string, flag int, perm fs.FileMode) (File, syscall.Errno) { 25 return nil, syscall.ENOSYS 26 } 27 28 // Lstat implements FS.Lstat 29 func (UnimplementedFS) Lstat(path string) (Stat_t, syscall.Errno) { 30 return Stat_t{}, syscall.ENOSYS 31 } 32 33 // Stat implements FS.Stat 34 func (UnimplementedFS) Stat(path string) (Stat_t, syscall.Errno) { 35 return Stat_t{}, syscall.ENOSYS 36 } 37 38 // Readlink implements FS.Readlink 39 func (UnimplementedFS) Readlink(path string) (string, syscall.Errno) { 40 return "", syscall.ENOSYS 41 } 42 43 // Mkdir implements FS.Mkdir 44 func (UnimplementedFS) Mkdir(path string, perm fs.FileMode) syscall.Errno { 45 return syscall.ENOSYS 46 } 47 48 // Chmod implements FS.Chmod 49 func (UnimplementedFS) Chmod(path string, perm fs.FileMode) syscall.Errno { 50 return syscall.ENOSYS 51 } 52 53 // Chown implements FS.Chown 54 func (UnimplementedFS) Chown(path string, uid, gid int) syscall.Errno { 55 return syscall.ENOSYS 56 } 57 58 // Lchown implements FS.Lchown 59 func (UnimplementedFS) Lchown(path string, uid, gid int) syscall.Errno { 60 return syscall.ENOSYS 61 } 62 63 // Rename implements FS.Rename 64 func (UnimplementedFS) Rename(from, to string) syscall.Errno { 65 return syscall.ENOSYS 66 } 67 68 // Rmdir implements FS.Rmdir 69 func (UnimplementedFS) Rmdir(path string) syscall.Errno { 70 return syscall.ENOSYS 71 } 72 73 // Link implements FS.Link 74 func (UnimplementedFS) Link(_, _ string) syscall.Errno { 75 return syscall.ENOSYS 76 } 77 78 // Symlink implements FS.Symlink 79 func (UnimplementedFS) Symlink(_, _ string) syscall.Errno { 80 return syscall.ENOSYS 81 } 82 83 // Unlink implements FS.Unlink 84 func (UnimplementedFS) Unlink(path string) syscall.Errno { 85 return syscall.ENOSYS 86 } 87 88 // Utimens implements FS.Utimens 89 func (UnimplementedFS) Utimens(path string, times *[2]syscall.Timespec, symlinkFollow bool) syscall.Errno { 90 return syscall.ENOSYS 91 } 92 93 // Truncate implements FS.Truncate 94 func (UnimplementedFS) Truncate(string, int64) syscall.Errno { 95 return syscall.ENOSYS 96 } 97 98 // UnimplementedFile is a File that returns syscall.ENOSYS for all functions, 99 // except where no-op are otherwise documented. 100 // 101 // This should be embedded to have forward compatible implementations. 102 type UnimplementedFile struct{} 103 104 // Ino implements File.Ino 105 func (UnimplementedFile) Ino() (uint64, syscall.Errno) { 106 return 0, 0 107 } 108 109 // IsAppend implements File.IsAppend 110 func (UnimplementedFile) IsAppend() bool { 111 return false 112 } 113 114 // SetAppend implements File.SetAppend 115 func (UnimplementedFile) SetAppend(bool) syscall.Errno { 116 return syscall.ENOSYS 117 } 118 119 // IsNonblock implements File.IsNonblock 120 func (UnimplementedFile) IsNonblock() bool { 121 return false 122 } 123 124 // SetNonblock implements File.SetNonblock 125 func (UnimplementedFile) SetNonblock(bool) syscall.Errno { 126 return syscall.ENOSYS 127 } 128 129 // Stat implements File.Stat 130 func (UnimplementedFile) Stat() (Stat_t, syscall.Errno) { 131 return Stat_t{}, syscall.ENOSYS 132 } 133 134 // IsDir implements File.IsDir 135 func (UnimplementedFile) IsDir() (bool, syscall.Errno) { 136 return false, syscall.ENOSYS 137 } 138 139 // Read implements File.Read 140 func (UnimplementedFile) Read([]byte) (int, syscall.Errno) { 141 return 0, syscall.ENOSYS 142 } 143 144 // Pread implements File.Pread 145 func (UnimplementedFile) Pread([]byte, int64) (int, syscall.Errno) { 146 return 0, syscall.ENOSYS 147 } 148 149 // Seek implements File.Seek 150 func (UnimplementedFile) Seek(int64, int) (int64, syscall.Errno) { 151 return 0, syscall.ENOSYS 152 } 153 154 // Readdir implements File.Readdir 155 func (UnimplementedFile) Readdir(int) (dirents []Dirent, errno syscall.Errno) { 156 return nil, syscall.ENOSYS 157 } 158 159 // PollRead implements File.PollRead 160 func (UnimplementedFile) PollRead(*time.Duration) (ready bool, errno syscall.Errno) { 161 return false, syscall.ENOSYS 162 } 163 164 // Write implements File.Write 165 func (UnimplementedFile) Write([]byte) (int, syscall.Errno) { 166 return 0, syscall.ENOSYS 167 } 168 169 // Pwrite implements File.Pwrite 170 func (UnimplementedFile) Pwrite([]byte, int64) (int, syscall.Errno) { 171 return 0, syscall.ENOSYS 172 } 173 174 // Truncate implements File.Truncate 175 func (UnimplementedFile) Truncate(int64) syscall.Errno { 176 return syscall.ENOSYS 177 } 178 179 // Sync implements File.Sync 180 func (UnimplementedFile) Sync() syscall.Errno { 181 return 0 // not syscall.ENOSYS 182 } 183 184 // Datasync implements File.Datasync 185 func (UnimplementedFile) Datasync() syscall.Errno { 186 return 0 // not syscall.ENOSYS 187 } 188 189 // Chmod implements File.Chmod 190 func (UnimplementedFile) Chmod(fs.FileMode) syscall.Errno { 191 return syscall.ENOSYS 192 } 193 194 // Chown implements File.Chown 195 func (UnimplementedFile) Chown(int, int) syscall.Errno { 196 return syscall.ENOSYS 197 } 198 199 // Utimens implements File.Utimens 200 func (UnimplementedFile) Utimens(*[2]syscall.Timespec) syscall.Errno { 201 return syscall.ENOSYS 202 } 203 204 // Close implements File.Close 205 func (UnimplementedFile) Close() (errno syscall.Errno) { return }