Cygwin: errno: handle ERROR_CASE_DIFFERING_NAMES_IN_DIR

Rather than special case status code 0xc00004b3, add status and matching
error code to ntdll.h and handle it as part of the standard error mapping.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2021-12-02 14:13:43 +01:00
parent e1026837dd
commit fb1fe93203
3 changed files with 7 additions and 9 deletions

View File

@ -53,6 +53,7 @@ static const errmap_t errmap[] =
X (CALL_NOT_IMPLEMENTED, ENOSYS),
X (CANCELLED, EINTR),
X (CANNOT_MAKE, EPERM),
X (CASE_DIFFERING_NAMES_IN_DIR, EINVAL),
X (CHILD_NOT_COMPLETE, EBUSY),
X (COMMITMENT_LIMIT, EAGAIN),
X (CONNECTION_REFUSED, ECONNREFUSED),

View File

@ -2547,14 +2547,6 @@ fhandler_disk_file::fs_ioc_setflags (uint64_t flags)
FileCaseSensitiveInformation);
if (!NT_SUCCESS (status))
{
/* Special case: The directory contains files which only
differ in case. NtSetInformationFile refuses to change
back to case insensitivity and returns status 0xc00004b3.
There's no STATUS_xyz macro assigned to that value yet,
nor does it map to a useful Win32 error value. */
if (status == (NTSTATUS) 0xc00004b3)
set_errno (EINVAL); /* Does that make sense? */
else
__seterrno_from_nt_status (status);
goto out;
}

View File

@ -15,6 +15,11 @@
extern GUID __cygwin_socket_guid;
#define CYGWIN_SOCKET_GUID (&__cygwin_socket_guid)
/* Status codes not known to Mingw-w64 yet. The error code needs to
be maintained here as well as long as Mingw-w64 didn't follow up. */
#define STATUS_CASE_DIFFERING_NAMES_IN_DIR ((NTSTATUS)0xC00004B3)
#define ERROR_CASE_DIFFERING_NAMES_IN_DIR __MSABI_LONG(424)
/* Custom Cygwin-only status codes. */
#define STATUS_THREAD_SIGNALED ((NTSTATUS)0xe0000001)
#define STATUS_THREAD_CANCELED ((NTSTATUS)0xe0000002)