From 74ba15836233e028331e2195ed78a16afdc09c17 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 9 Feb 2013 18:36:53 +0200 Subject: [PATCH] Fix bug #13661 with w32-downcase-file-names and shell-command. src/callproc.c (Fcall_process_region): Make sure the XXXXXX part of the temporary file pattern is not downcased even when w32-downcase-file-names is non-nil. --- src/ChangeLog | 4 ++++ src/callproc.c | 22 ++++++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 599c515e858..35e313c1afb 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2013-02-09 Eli Zaretskii + * callproc.c (Fcall_process_region): Make sure the XXXXXX part of + the temporary file pattern is not downcased even when + w32-downcase-file-names is non-nil. (Bug#13661) + * xdisp.c (decode_mode_spec): Remove handling of %t. * msdos.c (careadlinkatcwd): Remove. diff --git a/src/callproc.c b/src/callproc.c index ea79da7ff5a..cb11ee0cc53 100644 --- a/src/callproc.c +++ b/src/callproc.c @@ -1016,8 +1016,26 @@ usage: (call-process-region START END PROGRAM &optional DELETE BUFFER DISPLAY &r { USE_SAFE_ALLOCA; Lisp_Object pattern = Fexpand_file_name (Vtemp_file_name_pattern, tmpdir); - Lisp_Object encoded_tem = ENCODE_FILE (pattern); - char *tempfile = SAFE_ALLOCA (SBYTES (encoded_tem) + 1); + Lisp_Object encoded_tem; + char *tempfile; + +#ifdef WINDOWSNT + /* Cannot use the result of Fexpand_file_name, because it + downcases the XXXXXX part of the pattern, and mktemp then + doesn't recognize it. */ + if (!NILP (Vw32_downcase_file_names)) + { + Lisp_Object dirname = Ffile_name_directory (pattern); + + if (NILP (dirname)) + pattern = Vtemp_file_name_pattern; + else + pattern = concat2 (dirname, Vtemp_file_name_pattern); + } +#endif + + encoded_tem = ENCODE_FILE (pattern); + tempfile = SAFE_ALLOCA (SBYTES (encoded_tem) + 1); memcpy (tempfile, SDATA (encoded_tem), SBYTES (encoded_tem) + 1); coding_systems = Qt; -- 2.39.5