Fix another instance of bug #12933 with non-ASCII file names on Windows.

src/fileio.c (file_name_as_directory, directory_file_name) [DOS_NT]:
 Encode the file name before passing it to dostounix_filename, in
 case it will downcase it (under w32-downcase-file-names).
This commit is contained in:
Eli Zaretskii 2012-12-04 20:48:01 +02:00
parent 52d129cd62
commit 2e7cddd303
2 changed files with 25 additions and 4 deletions

View file

@ -1,3 +1,10 @@
2012-12-04 Eli Zaretskii <eliz@gnu.org>
* fileio.c (file_name_as_directory, directory_file_name) [DOS_NT]:
Encode the file name before passing it to dostounix_filename, in
case it will downcase it (under w32-downcase-file-names).
(Bug#12933)
2012-12-01 Chong Yidong <cyd@gnu.org>
* fileio.c (Vauto_save_list_file_name): Doc fix.

View file

@ -455,7 +455,7 @@ get a current directory to run processes in. */)
/* Convert from file name SRC of length SRCLEN to directory name
in DST. On UNIX, just make sure there is a terminating /.
Return the length of DST. */
Return the length of DST in bytes. */
static ptrdiff_t
file_name_as_directory (char *dst, const char *src, ptrdiff_t srclen)
@ -477,7 +477,14 @@ file_name_as_directory (char *dst, const char *src, ptrdiff_t srclen)
srclen++;
}
#ifdef DOS_NT
dostounix_filename (dst);
{
Lisp_Object tem_fn = make_specified_string (dst, -1, srclen, 1);
tem_fn = ENCODE_FILE (tem_fn);
dostounix_filename (SSDATA (tem_fn));
tem_fn = DECODE_FILE (tem_fn);
memcpy (dst, SSDATA (tem_fn), (srclen = SBYTES (tem_fn)) + 1);
}
#endif
return srclen;
}
@ -519,7 +526,7 @@ For a Unix-syntax file name, just appends a slash. */)
/* Convert from directory name SRC of length SRCLEN to
file name in DST. On UNIX, just make sure there isn't
a terminating /. Return the length of DST. */
a terminating /. Return the length of DST in bytes. */
static ptrdiff_t
directory_file_name (char *dst, char *src, ptrdiff_t srclen)
@ -538,7 +545,14 @@ directory_file_name (char *dst, char *src, ptrdiff_t srclen)
srclen--;
}
#ifdef DOS_NT
dostounix_filename (dst);
{
Lisp_Object tem_fn = make_specified_string (dst, -1, srclen, 1);
tem_fn = ENCODE_FILE (tem_fn);
dostounix_filename (SSDATA (tem_fn));
tem_fn = DECODE_FILE (tem_fn);
memcpy (dst, SSDATA (tem_fn), (srclen = SBYTES (tem_fn)) + 1);
}
#endif
return srclen;
}