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  }