From fe011d0f64690f0f8bc3b25ec720658b84776264 Mon Sep 17 00:00:00 2001 From: Nuno Cruces Date: Mon, 27 May 2024 13:16:52 +0100 Subject: [PATCH] Maps ERROR_NOT_A_REPARSE_POINT to EINVAL This fixes a Windows inconsistency where Readlink was returning EIO instead of EINVAL when the named file is not a symbolic link. Signed-off-by: Nuno Cruces --- experimental/sys/syscall_errno_windows.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/experimental/sys/syscall_errno_windows.go b/experimental/sys/syscall_errno_windows.go index 761a1f9dc2..5ebc1780f4 100644 --- a/experimental/sys/syscall_errno_windows.go +++ b/experimental/sys/syscall_errno_windows.go @@ -23,6 +23,10 @@ const ( // instead of syscall.ENOTDIR _ERROR_DIRECTORY = syscall.Errno(0x10B) + // _ERROR_NOT_A_REPARSE_POINT is a Windows error returned by os.Readlink + // instead of syscall.EINVAL + _ERROR_NOT_A_REPARSE_POINT = syscall.Errno(0x1126) + // _ERROR_INVALID_SOCKET is a Windows error returned by winsock_select // when a given handle is not a socket. _ERROR_INVALID_SOCKET = syscall.Errno(0x2736) @@ -51,7 +55,7 @@ func errorToErrno(err error) Errno { return EBADF case syscall.ERROR_PRIVILEGE_NOT_HELD: return EPERM - case _ERROR_NEGATIVE_SEEK, _ERROR_INVALID_NAME: + case _ERROR_NEGATIVE_SEEK, _ERROR_INVALID_NAME, _ERROR_NOT_A_REPARSE_POINT: return EINVAL } errno, _ := syscallToErrno(err)