diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2021-12-02 14:13:43 +0100 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2021-12-02 14:16:05 +0100 |
commit | fb1fe932038e5a9833fcc5fc53365a2212d76584 (patch) | |
tree | 952a8fcdaee9ee59e19247ffd47a970d569cf122 | |
parent | e1026837dd43577273ec9fcbaf4c2c41fdabd56d (diff) | |
download | newlib-fb1fe932038e5a9833fcc5fc53365a2212d76584.zip newlib-fb1fe932038e5a9833fcc5fc53365a2212d76584.tar.gz newlib-fb1fe932038e5a9833fcc5fc53365a2212d76584.tar.bz2 |
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>
-rw-r--r-- | winsup/cygwin/errno.cc | 1 | ||||
-rw-r--r-- | winsup/cygwin/fhandler_disk_file.cc | 10 | ||||
-rw-r--r-- | winsup/cygwin/ntdll.h | 5 |
3 files changed, 7 insertions, 9 deletions
diff --git a/winsup/cygwin/errno.cc b/winsup/cygwin/errno.cc index 4203265..55219cc 100644 --- a/winsup/cygwin/errno.cc +++ b/winsup/cygwin/errno.cc @@ -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), diff --git a/winsup/cygwin/fhandler_disk_file.cc b/winsup/cygwin/fhandler_disk_file.cc index 26726c5..3cec1ed 100644 --- a/winsup/cygwin/fhandler_disk_file.cc +++ b/winsup/cygwin/fhandler_disk_file.cc @@ -2547,15 +2547,7 @@ 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); + __seterrno_from_nt_status (status); goto out; } } diff --git a/winsup/cygwin/ntdll.h b/winsup/cygwin/ntdll.h index f7c427e..59c3966 100644 --- a/winsup/cygwin/ntdll.h +++ b/winsup/cygwin/ntdll.h @@ -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) |