github.com/wasilibs/wazerox@v0.0.0-20240124024944-4923be63ab5f/internal/wasip1/fs.go (about) 1 package wasip1 2 3 import ( 4 "fmt" 5 ) 6 7 const ( 8 FdAdviseName = "fd_advise" 9 FdAllocateName = "fd_allocate" 10 FdCloseName = "fd_close" 11 FdDatasyncName = "fd_datasync" 12 FdFdstatGetName = "fd_fdstat_get" 13 FdFdstatSetFlagsName = "fd_fdstat_set_flags" 14 FdFdstatSetRightsName = "fd_fdstat_set_rights" 15 FdFilestatGetName = "fd_filestat_get" 16 FdFilestatSetSizeName = "fd_filestat_set_size" 17 FdFilestatSetTimesName = "fd_filestat_set_times" 18 FdPreadName = "fd_pread" 19 FdPrestatGetName = "fd_prestat_get" 20 FdPrestatDirNameName = "fd_prestat_dir_name" 21 FdPwriteName = "fd_pwrite" 22 FdReadName = "fd_read" 23 FdReaddirName = "fd_readdir" 24 FdRenumberName = "fd_renumber" 25 FdSeekName = "fd_seek" 26 FdSyncName = "fd_sync" 27 FdTellName = "fd_tell" 28 FdWriteName = "fd_write" 29 30 PathCreateDirectoryName = "path_create_directory" 31 PathFilestatGetName = "path_filestat_get" 32 PathFilestatSetTimesName = "path_filestat_set_times" 33 PathLinkName = "path_link" 34 PathOpenName = "path_open" 35 PathReadlinkName = "path_readlink" 36 PathRemoveDirectoryName = "path_remove_directory" 37 PathRenameName = "path_rename" 38 PathSymlinkName = "path_symlink" 39 PathUnlinkFileName = "path_unlink_file" 40 ) 41 42 // oflags are open flags used by path_open 43 // See https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#-oflags-flagsu16 44 const ( 45 // O_CREAT creates a file if it does not exist. 46 O_CREAT uint16 = 1 << iota //nolint 47 // O_DIRECTORY fails if not a directory. 48 O_DIRECTORY 49 // O_EXCL fails if file already exists. 50 O_EXCL //nolint 51 // O_TRUNC truncates the file to size 0. 52 O_TRUNC //nolint 53 ) 54 55 func OflagsString(oflags int) string { 56 return flagsString(oflagNames[:], oflags) 57 } 58 59 var oflagNames = [...]string{ 60 "CREAT", 61 "DIRECTORY", 62 "EXCL", 63 "TRUNC", 64 } 65 66 // file descriptor flags 67 // See https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#fdflags 68 const ( 69 FD_APPEND uint16 = 1 << iota //nolint 70 FD_DSYNC 71 FD_NONBLOCK 72 FD_RSYNC 73 FD_SYNC 74 ) 75 76 func FdFlagsString(fdflags int) string { 77 return flagsString(fdflagNames[:], fdflags) 78 } 79 80 var fdflagNames = [...]string{ 81 "APPEND", 82 "DSYNC", 83 "NONBLOCK", 84 "RSYNC", 85 "SYNC", 86 } 87 88 // See https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#lookupflags 89 const ( 90 // LOOKUP_SYMLINK_FOLLOW expands a path if it resolves into a symbolic 91 // link. 92 LOOKUP_SYMLINK_FOLLOW uint16 = 1 << iota //nolint 93 ) 94 95 var lookupflagNames = [...]string{ 96 "SYMLINK_FOLLOW", 97 } 98 99 func LookupflagsString(lookupflags int) string { 100 return flagsString(lookupflagNames[:], lookupflags) 101 } 102 103 // DirentSize is the size of the dirent struct, which should be followed by the 104 // length of a file name. 105 const DirentSize = uint32(24) 106 107 const ( 108 FILETYPE_UNKNOWN uint8 = iota 109 FILETYPE_BLOCK_DEVICE 110 FILETYPE_CHARACTER_DEVICE 111 FILETYPE_DIRECTORY 112 FILETYPE_REGULAR_FILE 113 FILETYPE_SOCKET_DGRAM 114 FILETYPE_SOCKET_STREAM 115 FILETYPE_SYMBOLIC_LINK 116 ) 117 118 // FiletypeName returns string name of the file type. 119 func FiletypeName(filetype uint8) string { 120 if int(filetype) < len(filetypeToString) { 121 return filetypeToString[filetype] 122 } 123 return fmt.Sprintf("filetype(%d)", filetype) 124 } 125 126 var filetypeToString = [...]string{ 127 "UNKNOWN", 128 "BLOCK_DEVICE", 129 "CHARACTER_DEVICE", 130 "DIRECTORY", 131 "REGULAR_FILE", 132 "SOCKET_DGRAM", 133 "SOCKET_STREAM", 134 "SYMBOLIC_LINK", 135 } 136 137 // https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#fstflags 138 const ( 139 FstflagsAtim uint16 = 1 << iota 140 FstflagsAtimNow 141 FstflagsMtim 142 FstflagsMtimNow 143 ) 144 145 var fstflagNames = [...]string{ 146 "ATIM", 147 "ATIM_NOW", 148 "MTIM", 149 "MTIM_NOW", 150 } 151 152 func FstflagsString(fdflags int) string { 153 return flagsString(fstflagNames[:], fdflags) 154 } 155 156 // https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#-advice-enumu8 157 const ( 158 FdAdviceNormal byte = iota 159 FdAdviceSequential 160 FdAdviceRandom 161 FdAdviceWillNeed 162 FdAdviceDontNeed 163 FdAdviceNoReuse 164 )