Files
wazero/internal/fsapi/dir.go
Crypt Keeper 34324031cb extracts FS interfaces into fsapi package and consolidates impls (#1477)
Signed-off-by: Adrian Cole <adrian@tetrate.io>
Signed-off-by: Edoardo Vacchi <evacchi@users.noreply.github.com>
Co-authored-by: Edoardo Vacchi <evacchi@users.noreply.github.com>
2023-05-17 07:19:54 +03:00

100 lines
2.3 KiB
Go

package fsapi
import (
"fmt"
"io/fs"
"syscall"
"time"
)
// Dirent is an entry read from a directory.
//
// This is a portable variant of syscall.Dirent containing fields needed for
// WebAssembly ABI including WASI snapshot-01 and wasi-filesystem. Unlike
// fs.DirEntry, this may include the Ino.
type Dirent struct {
// ^^ Dirent name matches syscall.Dirent
// Name is the base name of the directory entry.
Name string
// Ino is the file serial number, or zero if not available.
Ino uint64
// Type is fs.FileMode masked on fs.ModeType. For example, zero is a
// regular file, fs.ModeDir is a directory and fs.ModeIrregular is unknown.
Type fs.FileMode
}
func (d *Dirent) String() string {
return fmt.Sprintf("name=%s, type=%v, ino=%d", d.Name, d.Type, d.Ino)
}
// IsDir returns true if the Type is fs.ModeDir.
func (d *Dirent) IsDir() bool {
return d.Type == fs.ModeDir
}
// DirFile is embeddable to reduce the amount of functions to implement a file.
type DirFile struct{}
// IsAppend implements File.IsAppend
func (DirFile) IsAppend() bool {
return false
}
// SetAppend implements File.SetAppend
func (DirFile) SetAppend(bool) syscall.Errno {
return syscall.EISDIR
}
// IsNonblock implements File.IsNonblock
func (DirFile) IsNonblock() bool {
return false
}
// SetNonblock implements File.SetNonblock
func (DirFile) SetNonblock(bool) syscall.Errno {
return syscall.EISDIR
}
// IsDir implements File.IsDir
func (DirFile) IsDir() (bool, syscall.Errno) {
return true, 0
}
// Read implements File.Read
func (DirFile) Read([]byte) (int, syscall.Errno) {
return 0, syscall.EISDIR
}
// Pread implements File.Pread
func (DirFile) Pread([]byte, int64) (int, syscall.Errno) {
return 0, syscall.EISDIR
}
// Seek implements File.Seek
func (DirFile) Seek(int64, int) (int64, syscall.Errno) {
return 0, syscall.EISDIR
}
// PollRead implements File.PollRead
func (DirFile) PollRead(*time.Duration) (ready bool, errno syscall.Errno) {
return false, syscall.ENOSYS
}
// Write implements File.Write
func (DirFile) Write([]byte) (int, syscall.Errno) {
return 0, syscall.EISDIR
}
// Pwrite implements File.Pwrite
func (DirFile) Pwrite([]byte, int64) (int, syscall.Errno) {
return 0, syscall.EISDIR
}
// Truncate implements File.Truncate
func (DirFile) Truncate(int64) syscall.Errno {
return syscall.EISDIR
}