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 }