github.com/tetratelabs/wazero@v1.2.1/internal/platform/errno_windows.go (about) 1 package platform 2 3 import "syscall" 4 5 // See https://learn.microsoft.com/en-us/windows/win32/debug/system-error-codes--0-499- 6 const ( 7 // ERROR_ACCESS_DENIED is a Windows error returned by syscall.Unlink 8 // instead of syscall.EACCES 9 ERROR_ACCESS_DENIED = syscall.Errno(5) 10 11 // ERROR_INVALID_HANDLE is a Windows error returned by syscall.Write 12 // instead of syscall.EBADF 13 ERROR_INVALID_HANDLE = syscall.Errno(6) 14 15 // ERROR_FILE_EXISTS is a Windows error returned by os.OpenFile 16 // instead of syscall.EEXIST 17 ERROR_FILE_EXISTS = syscall.Errno(0x50) 18 19 // ERROR_INVALID_NAME is a Windows error returned by open when a file 20 // path has a trailing slash 21 ERROR_INVALID_NAME = syscall.Errno(0x7B) 22 23 // ERROR_NEGATIVE_SEEK is a Windows error returned by os.Truncate 24 // instead of syscall.EINVAL 25 ERROR_NEGATIVE_SEEK = syscall.Errno(0x83) 26 27 // ERROR_DIR_NOT_EMPTY is a Windows error returned by syscall.Rmdir 28 // instead of syscall.ENOTEMPTY 29 ERROR_DIR_NOT_EMPTY = syscall.Errno(0x91) 30 31 // ERROR_ALREADY_EXISTS is a Windows error returned by os.Mkdir 32 // instead of syscall.EEXIST 33 ERROR_ALREADY_EXISTS = syscall.Errno(0xB7) 34 35 // ERROR_DIRECTORY is a Windows error returned by syscall.Rmdir 36 // instead of syscall.ENOTDIR 37 ERROR_DIRECTORY = syscall.Errno(0x10B) 38 ) 39 40 // See https://learn.microsoft.com/en-us/windows/win32/debug/system-error-codes--1300-1699- 41 const ( 42 // ERROR_PRIVILEGE_NOT_HELD is a Windows error returned by os.Symlink 43 // instead of syscall.EPERM. 44 // 45 // Note: This can happen when trying to create symlinks w/o admin perms. 46 ERROR_PRIVILEGE_NOT_HELD = syscall.Errno(0x522) 47 ) 48 49 func adjustErrno(err syscall.Errno) syscall.Errno { 50 // Note: In windows, ERROR_PATH_NOT_FOUND(0x3) maps to syscall.ENOTDIR 51 switch err { 52 case ERROR_ALREADY_EXISTS: 53 return syscall.EEXIST 54 case ERROR_DIRECTORY: 55 return syscall.ENOTDIR 56 case ERROR_DIR_NOT_EMPTY: 57 return syscall.ENOTEMPTY 58 case ERROR_FILE_EXISTS: 59 return syscall.EEXIST 60 case ERROR_INVALID_HANDLE: 61 return syscall.EBADF 62 case ERROR_ACCESS_DENIED: 63 // POSIX read and write functions expect EBADF, not EACCES when not 64 // open for reading or writing. 65 return syscall.EBADF 66 case ERROR_PRIVILEGE_NOT_HELD: 67 return syscall.EPERM 68 case ERROR_NEGATIVE_SEEK, ERROR_INVALID_NAME: 69 return syscall.EINVAL 70 } 71 return err 72 }