summaryrefslogtreecommitdiff
path: root/src/w32.c
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2019-09-16 22:19:16 +0300
committerEli Zaretskii <eliz@gnu.org>2019-09-16 22:19:16 +0300
commitfacd6d5affaa897e7efe4018ede054489268b065 (patch)
tree9b88aa54fff0f733e0d58840f38dac30adc99d25 /src/w32.c
parent169d04b8ac416c71a8b89a9c4a975d0f014265e0 (diff)
downloademacs-facd6d5affaa897e7efe4018ede054489268b065.tar.gz
Improve error reporting in file_accessible_directory_p
* src/w32.c (w32_accessible_directory_p): Set errno, so that file_accessible_directory_p does on MS-Windows, to live up to its callers' expectations.
Diffstat (limited to 'src/w32.c')
-rw-r--r--src/w32.c29
1 files changed, 26 insertions, 3 deletions
diff --git a/src/w32.c b/src/w32.c
index d7a91692c63..88e9aef338f 100644
--- a/src/w32.c
+++ b/src/w32.c
@@ -4151,13 +4151,36 @@ w32_accessible_directory_p (const char *dirname, ptrdiff_t dirlen)
/* In case DIRNAME cannot be expressed in characters from the
current ANSI codepage. */
if (_mbspbrk (pat_a, "?"))
- dh = INVALID_HANDLE_VALUE;
- else
- dh = FindFirstFileA (pat_a, &dfd_a);
+ {
+ errno = ENOENT;
+ return 0;
+ }
+ dh = FindFirstFileA (pat_a, &dfd_a);
}
if (dh == INVALID_HANDLE_VALUE)
+ {
+ DWORD w32err = GetLastError ();
+
+ switch (w32err)
+ {
+ case ERROR_INVALID_NAME:
+ case ERROR_BAD_PATHNAME:
+ case ERROR_FILE_NOT_FOUND:
+ case ERROR_PATH_NOT_FOUND:
+ case ERROR_NO_MORE_FILES:
+ case ERROR_BAD_NETPATH:
+ errno = ENOENT;
+ break;
+ case ERROR_NOT_READY:
+ errno = ENODEV;
+ break;
+ default:
+ errno = EACCES;
+ break;
+ }
return 0;
+ }
FindClose (dh);
return 1;
}