]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve error reporting in file_accessible_directory_p
authorEli Zaretskii <eliz@gnu.org>
Mon, 16 Sep 2019 19:19:16 +0000 (22:19 +0300)
committerEli Zaretskii <eliz@gnu.org>
Mon, 16 Sep 2019 19:19:16 +0000 (22:19 +0300)
* 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.

src/w32.c

index d7a91692c63108781042eecb0ead36a09bf03dec..88e9aef338f66780f05dd7396f4d212df48a79bb 100644 (file)
--- 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;
 }