]> git.ipfire.org Git - thirdparty/git.git/commitdiff
mingw: add symlink-specific error codes
authorKarsten Blees <blees@dcon.de>
Wed, 17 Dec 2025 14:08:46 +0000 (14:08 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 17 Dec 2025 23:22:18 +0000 (08:22 +0900)
The Win32 API calls do not set `errno`; Instead, error codes for failed
operations must be obtained via the `GetLastError()` function. Git would
not know what to do with those error values, though, which is why Git's
Windows compatibility layer translates them to `errno` values.

Let's handle a couple of symlink-related error codes that will become
relevant with the upcoming support for symlinks on Windows.

Signed-off-by: Karsten Blees <blees@dcon.de>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
compat/mingw.c

index 0fe00a5b703d0727bcc88c18f6bbeb443f08baaf..0e8807196fcbedef6618e32d0dd8826f5a4d6b32 100644 (file)
@@ -102,6 +102,7 @@ int err_win_to_posix(DWORD winerr)
        case ERROR_INVALID_PARAMETER: error = EINVAL; break;
        case ERROR_INVALID_PASSWORD: error = EPERM; break;
        case ERROR_INVALID_PRIMARY_GROUP: error = EINVAL; break;
+       case ERROR_INVALID_REPARSE_DATA: error = EINVAL; break;
        case ERROR_INVALID_SIGNAL_NUMBER: error = EINVAL; break;
        case ERROR_INVALID_TARGET_HANDLE: error = EIO; break;
        case ERROR_INVALID_WORKSTATION: error = EACCES; break;
@@ -116,6 +117,7 @@ int err_win_to_posix(DWORD winerr)
        case ERROR_NEGATIVE_SEEK: error = ESPIPE; break;
        case ERROR_NOACCESS: error = EFAULT; break;
        case ERROR_NONE_MAPPED: error = EINVAL; break;
+       case ERROR_NOT_A_REPARSE_POINT: error = EINVAL; break;
        case ERROR_NOT_ENOUGH_MEMORY: error = ENOMEM; break;
        case ERROR_NOT_READY: error = EAGAIN; break;
        case ERROR_NOT_SAME_DEVICE: error = EXDEV; break;
@@ -136,6 +138,9 @@ int err_win_to_posix(DWORD winerr)
        case ERROR_PIPE_NOT_CONNECTED: error = EPIPE; break;
        case ERROR_PRIVILEGE_NOT_HELD: error = EACCES; break;
        case ERROR_READ_FAULT: error = EIO; break;
+       case ERROR_REPARSE_ATTRIBUTE_CONFLICT: error = EINVAL; break;
+       case ERROR_REPARSE_TAG_INVALID: error = EINVAL; break;
+       case ERROR_REPARSE_TAG_MISMATCH: error = EINVAL; break;
        case ERROR_SEEK: error = EIO; break;
        case ERROR_SEEK_ON_DEVICE: error = ESPIPE; break;
        case ERROR_SHARING_BUFFER_EXCEEDED: error = ENFILE; break;