diff options
author | Eli Zaretskii <eliz@gnu.org> | 2019-09-16 22:19:16 +0300 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2019-09-16 22:19:16 +0300 |
commit | facd6d5affaa897e7efe4018ede054489268b065 (patch) | |
tree | 9b88aa54fff0f733e0d58840f38dac30adc99d25 /src/w32.c | |
parent | 169d04b8ac416c71a8b89a9c4a975d0f014265e0 (diff) | |
download | emacs-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.c | 29 |
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; } |