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:
parent
52d129cd62
commit
2e7cddd303
2 changed files with 25 additions and 4 deletions
|
@ -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.
|
||||
|
|
22
src/fileio.c
22
src/fileio.c
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue