Signal a file-error from directory-files on MS-Windows (Bug#19701)
src/dired.c (directory_files_internal) [WINDOWSNT]: If readdir returns NULL and errno is ENOTDIR, behave as if opendir failed to open the directory. src/w32.c (sys_readdir): If FindFirstFile fails because the directory doesn't exist, set errno to ENOTDIR.
This commit is contained in:
parent
fd4e65e4ae
commit
9664defd26
3 changed files with 38 additions and 1 deletions
|
@ -1,3 +1,12 @@
|
|||
2015-01-27 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* dired.c (directory_files_internal) [WINDOWSNT]: If readdir
|
||||
returns NULL and errno is ENOTDIR, behave as if opendir failed to
|
||||
open the directory. (Bug#19701)
|
||||
|
||||
* w32.c (sys_readdir): If FindFirstFile fails because the
|
||||
directory doesn't exist, set errno to ENOTDIR.
|
||||
|
||||
2015-01-24 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* nsterm.m (drawRect:): Add block/unblock_input (Bug#19660).
|
||||
|
|
13
src/dired.c
13
src/dired.c
|
@ -247,6 +247,19 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full,
|
|||
QUIT;
|
||||
continue;
|
||||
}
|
||||
#ifdef WINDOWSNT
|
||||
/* The MS-Windows implementation of 'opendir' doesn't
|
||||
actually open a directory until the first call to
|
||||
'readdir'. If 'readdir' fails to open the directory, it
|
||||
sets errno to ENOTDIR; we convert it here to ENOENT so
|
||||
that the error message is similar to what happens on
|
||||
Posix hosts in such cases. */
|
||||
if (errno == ENOTDIR)
|
||||
{
|
||||
errno = ENOENT;
|
||||
report_file_error ("Opening directory", directory);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
17
src/w32.c
17
src/w32.c
|
@ -3432,7 +3432,22 @@ sys_readdir (DIR *dirp)
|
|||
}
|
||||
|
||||
if (dir_find_handle == INVALID_HANDLE_VALUE)
|
||||
return NULL;
|
||||
{
|
||||
switch (GetLastError ())
|
||||
{
|
||||
case ERROR_PATH_NOT_FOUND:
|
||||
case ERROR_ACCESS_DENIED:
|
||||
case ERROR_INVALID_DRIVE:
|
||||
case ERROR_BAD_NETPATH:
|
||||
/* This special value will be noticed by
|
||||
directory_files_internal, which see. */
|
||||
errno = ENOTDIR;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else if (w32_unicode_filenames)
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue