mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2024-11-30 15:42:46 +00:00
165 lines
4 KiB
Go
165 lines
4 KiB
Go
|
package wasip1
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
FdAdviseName = "fd_advise"
|
||
|
FdAllocateName = "fd_allocate"
|
||
|
FdCloseName = "fd_close"
|
||
|
FdDatasyncName = "fd_datasync"
|
||
|
FdFdstatGetName = "fd_fdstat_get"
|
||
|
FdFdstatSetFlagsName = "fd_fdstat_set_flags"
|
||
|
FdFdstatSetRightsName = "fd_fdstat_set_rights"
|
||
|
FdFilestatGetName = "fd_filestat_get"
|
||
|
FdFilestatSetSizeName = "fd_filestat_set_size"
|
||
|
FdFilestatSetTimesName = "fd_filestat_set_times"
|
||
|
FdPreadName = "fd_pread"
|
||
|
FdPrestatGetName = "fd_prestat_get"
|
||
|
FdPrestatDirNameName = "fd_prestat_dir_name"
|
||
|
FdPwriteName = "fd_pwrite"
|
||
|
FdReadName = "fd_read"
|
||
|
FdReaddirName = "fd_readdir"
|
||
|
FdRenumberName = "fd_renumber"
|
||
|
FdSeekName = "fd_seek"
|
||
|
FdSyncName = "fd_sync"
|
||
|
FdTellName = "fd_tell"
|
||
|
FdWriteName = "fd_write"
|
||
|
|
||
|
PathCreateDirectoryName = "path_create_directory"
|
||
|
PathFilestatGetName = "path_filestat_get"
|
||
|
PathFilestatSetTimesName = "path_filestat_set_times"
|
||
|
PathLinkName = "path_link"
|
||
|
PathOpenName = "path_open"
|
||
|
PathReadlinkName = "path_readlink"
|
||
|
PathRemoveDirectoryName = "path_remove_directory"
|
||
|
PathRenameName = "path_rename"
|
||
|
PathSymlinkName = "path_symlink"
|
||
|
PathUnlinkFileName = "path_unlink_file"
|
||
|
)
|
||
|
|
||
|
// oflags are open flags used by path_open
|
||
|
// See https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#-oflags-flagsu16
|
||
|
const (
|
||
|
// O_CREAT creates a file if it does not exist.
|
||
|
O_CREAT uint16 = 1 << iota //nolint
|
||
|
// O_DIRECTORY fails if not a directory.
|
||
|
O_DIRECTORY
|
||
|
// O_EXCL fails if file already exists.
|
||
|
O_EXCL //nolint
|
||
|
// O_TRUNC truncates the file to size 0.
|
||
|
O_TRUNC //nolint
|
||
|
)
|
||
|
|
||
|
func OflagsString(oflags int) string {
|
||
|
return flagsString(oflagNames[:], oflags)
|
||
|
}
|
||
|
|
||
|
var oflagNames = [...]string{
|
||
|
"CREAT",
|
||
|
"DIRECTORY",
|
||
|
"EXCL",
|
||
|
"TRUNC",
|
||
|
}
|
||
|
|
||
|
// file descriptor flags
|
||
|
// See https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#fdflags
|
||
|
const (
|
||
|
FD_APPEND uint16 = 1 << iota //nolint
|
||
|
FD_DSYNC
|
||
|
FD_NONBLOCK
|
||
|
FD_RSYNC
|
||
|
FD_SYNC
|
||
|
)
|
||
|
|
||
|
func FdFlagsString(fdflags int) string {
|
||
|
return flagsString(fdflagNames[:], fdflags)
|
||
|
}
|
||
|
|
||
|
var fdflagNames = [...]string{
|
||
|
"APPEND",
|
||
|
"DSYNC",
|
||
|
"NONBLOCK",
|
||
|
"RSYNC",
|
||
|
"SYNC",
|
||
|
}
|
||
|
|
||
|
// See https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#lookupflags
|
||
|
const (
|
||
|
// LOOKUP_SYMLINK_FOLLOW expands a path if it resolves into a symbolic
|
||
|
// link.
|
||
|
LOOKUP_SYMLINK_FOLLOW uint16 = 1 << iota //nolint
|
||
|
)
|
||
|
|
||
|
var lookupflagNames = [...]string{
|
||
|
"SYMLINK_FOLLOW",
|
||
|
}
|
||
|
|
||
|
func LookupflagsString(lookupflags int) string {
|
||
|
return flagsString(lookupflagNames[:], lookupflags)
|
||
|
}
|
||
|
|
||
|
// DirentSize is the size of the dirent struct, which should be followed by the
|
||
|
// length of a file name.
|
||
|
const DirentSize = uint32(24)
|
||
|
|
||
|
const (
|
||
|
FILETYPE_UNKNOWN uint8 = iota
|
||
|
FILETYPE_BLOCK_DEVICE
|
||
|
FILETYPE_CHARACTER_DEVICE
|
||
|
FILETYPE_DIRECTORY
|
||
|
FILETYPE_REGULAR_FILE
|
||
|
FILETYPE_SOCKET_DGRAM
|
||
|
FILETYPE_SOCKET_STREAM
|
||
|
FILETYPE_SYMBOLIC_LINK
|
||
|
)
|
||
|
|
||
|
// FiletypeName returns string name of the file type.
|
||
|
func FiletypeName(filetype uint8) string {
|
||
|
if int(filetype) < len(filetypeToString) {
|
||
|
return filetypeToString[filetype]
|
||
|
}
|
||
|
return fmt.Sprintf("filetype(%d)", filetype)
|
||
|
}
|
||
|
|
||
|
var filetypeToString = [...]string{
|
||
|
"UNKNOWN",
|
||
|
"BLOCK_DEVICE",
|
||
|
"CHARACTER_DEVICE",
|
||
|
"DIRECTORY",
|
||
|
"REGULAR_FILE",
|
||
|
"SOCKET_DGRAM",
|
||
|
"SOCKET_STREAM",
|
||
|
"SYMBOLIC_LINK",
|
||
|
}
|
||
|
|
||
|
// https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#fstflags
|
||
|
const (
|
||
|
FstflagsAtim uint16 = 1 << iota
|
||
|
FstflagsAtimNow
|
||
|
FstflagsMtim
|
||
|
FstflagsMtimNow
|
||
|
)
|
||
|
|
||
|
var fstflagNames = [...]string{
|
||
|
"ATIM",
|
||
|
"ATIM_NOW",
|
||
|
"MTIM",
|
||
|
"MTIM_NOW",
|
||
|
}
|
||
|
|
||
|
func FstflagsString(fdflags int) string {
|
||
|
return flagsString(fstflagNames[:], fdflags)
|
||
|
}
|
||
|
|
||
|
// https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#-advice-enumu8
|
||
|
const (
|
||
|
FdAdviceNormal byte = iota
|
||
|
FdAdviceSequential
|
||
|
FdAdviceRandom
|
||
|
FdAdviceWillNeed
|
||
|
FdAdviceDontNeed
|
||
|
FdAdviceNoReuse
|
||
|
)
|