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>
|
2015-01-24 Jan Djärv <jan.h.d@swipnet.se>
|
||||||
|
|
||||||
* nsterm.m (drawRect:): Add block/unblock_input (Bug#19660).
|
* 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;
|
QUIT;
|
||||||
continue;
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
17
src/w32.c
17
src/w32.c
|
@ -3432,7 +3432,22 @@ sys_readdir (DIR *dirp)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dir_find_handle == INVALID_HANDLE_VALUE)
|
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)
|
else if (w32_unicode_filenames)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue