1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-04-27 16:51:06 -07:00

(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that

includes `?' characters, use the 8+3 alias in cAlternateFileName instead.
This commit is contained in:
Eli Zaretskii 2008-03-22 11:53:40 +00:00
parent 51ec3f09e4
commit b07103dc2b
2 changed files with 21 additions and 4 deletions

View file

@ -1,3 +1,9 @@
2008-03-22 Eli Zaretskii <eliz@gnu.org>
* w32.c (readdir): If FindFirstFile/FindNextFile return in
cFileName a file name that includes `?' characters, use the 8+3
alias in cAlternateFileName instead.
2008-03-21 Stefan Monnier <monnier@iro.umontreal.ca>
* buffer.c (enlarge_buffer_text): Fix int -> EMACS_INT.

View file

@ -1889,6 +1889,8 @@ closedir (DIR *dirp)
struct direct *
readdir (DIR *dirp)
{
int downcase = !NILP (Vw32_downcase_file_names);
if (wnet_enum_handle != INVALID_HANDLE_VALUE)
{
if (!read_unc_volume (wnet_enum_handle,
@ -1923,14 +1925,23 @@ readdir (DIR *dirp)
value returned by stat(). */
dir_static.d_ino = 1;
strcpy (dir_static.d_name, dir_find_data.cFileName);
/* If the file name in cFileName[] includes `?' characters, it means
the original file name used characters that cannot be represented
by the current ANSI codepage. To avoid total lossage, retrieve
the short 8+3 alias of the long file name. */
if (_mbspbrk (dir_static.d_name, "?"))
{
strcpy (dir_static.d_name, dir_find_data.cAlternateFileName);
downcase = 1; /* 8+3 aliases are returned in all caps */
}
dir_static.d_namlen = strlen (dir_static.d_name);
dir_static.d_reclen = sizeof (struct direct) - MAXNAMLEN + 3 +
dir_static.d_namlen - dir_static.d_namlen % 4;
dir_static.d_namlen = strlen (dir_find_data.cFileName);
strcpy (dir_static.d_name, dir_find_data.cFileName);
if (dir_is_fat)
_strlwr (dir_static.d_name);
else if (!NILP (Vw32_downcase_file_names))
else if (downcase)
{
register char *p;
for (p = dir_static.d_name; *p; p++)