mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2024-11-24 04:36:38 +00:00
93 lines
2.4 KiB
Go
93 lines
2.4 KiB
Go
|
package sys
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"io/fs"
|
||
|
|
||
|
"github.com/tetratelabs/wazero/sys"
|
||
|
)
|
||
|
|
||
|
// FileType is fs.FileMode masked on fs.ModeType. For example, zero is a
|
||
|
// regular file, fs.ModeDir is a directory and fs.ModeIrregular is unknown.
|
||
|
//
|
||
|
// Note: This is defined by Linux, not POSIX.
|
||
|
type FileType = fs.FileMode
|
||
|
|
||
|
// Dirent is an entry read from a directory via File.Readdir.
|
||
|
//
|
||
|
// # Notes
|
||
|
//
|
||
|
// - This extends `dirent` defined in POSIX with some fields defined by
|
||
|
// Linux. See https://man7.org/linux/man-pages/man3/readdir.3.html and
|
||
|
// https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/dirent.h.html
|
||
|
// - This has a subset of fields defined in sys.Stat_t. Notably, there is no
|
||
|
// field corresponding to Stat_t.Dev because that value will be constant
|
||
|
// for all files in a directory. To get the Dev value, call File.Stat on
|
||
|
// the directory File.Readdir was called on.
|
||
|
type Dirent struct {
|
||
|
// Ino is the file serial number, or zero if not available. See Ino for
|
||
|
// more details including impact returning a zero value.
|
||
|
Ino sys.Inode
|
||
|
|
||
|
// Name is the base name of the directory entry. Empty is invalid.
|
||
|
Name string
|
||
|
|
||
|
// 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.
|
||
|
//
|
||
|
// Note: This is defined by Linux, not POSIX.
|
||
|
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) Errno {
|
||
|
return EISDIR
|
||
|
}
|
||
|
|
||
|
// IsDir implements File.IsDir
|
||
|
func (DirFile) IsDir() (bool, Errno) {
|
||
|
return true, 0
|
||
|
}
|
||
|
|
||
|
// Read implements File.Read
|
||
|
func (DirFile) Read([]byte) (int, Errno) {
|
||
|
return 0, EISDIR
|
||
|
}
|
||
|
|
||
|
// Pread implements File.Pread
|
||
|
func (DirFile) Pread([]byte, int64) (int, Errno) {
|
||
|
return 0, EISDIR
|
||
|
}
|
||
|
|
||
|
// Write implements File.Write
|
||
|
func (DirFile) Write([]byte) (int, Errno) {
|
||
|
return 0, EISDIR
|
||
|
}
|
||
|
|
||
|
// Pwrite implements File.Pwrite
|
||
|
func (DirFile) Pwrite([]byte, int64) (int, Errno) {
|
||
|
return 0, EISDIR
|
||
|
}
|
||
|
|
||
|
// Truncate implements File.Truncate
|
||
|
func (DirFile) Truncate(int64) Errno {
|
||
|
return EISDIR
|
||
|
}
|