aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/w32fns.c31
1 files changed, 13 insertions, 18 deletions
diff --git a/src/w32fns.c b/src/w32fns.c
index 1acf5cb6efd..4664ea79a12 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -6809,17 +6809,21 @@ an integer representing a ShowWindow flag:
6809 filename_to_utf16 (SSDATA (current_dir), current_dir_w); 6809 filename_to_utf16 (SSDATA (current_dir), current_dir_w);
6810 if (STRINGP (document)) 6810 if (STRINGP (document))
6811 { 6811 {
6812 document = ENCODE_FILE (document);
6812 filename_to_utf16 (SSDATA (document), document_w); 6813 filename_to_utf16 (SSDATA (document), document_w);
6813 doc_w = document_w; 6814 doc_w = document_w;
6814 } 6815 }
6815 if (STRINGP (parameters)) 6816 if (STRINGP (parameters))
6816 { 6817 {
6817 int len = MultiByteToWideChar (CP_UTF8, MB_ERR_INVALID_CHARS, 6818 int len;
6818 SSDATA (parameters), -1, NULL, 0); 6819
6820 parameters = ENCODE_SYSTEM (parameters);
6821 len = MultiByteToWideChar (CP_ACP, MB_ERR_INVALID_CHARS,
6822 SSDATA (parameters), -1, NULL, 0);
6819 if (len > 32768) 6823 if (len > 32768)
6820 len = 32768; 6824 len = 32768;
6821 params_w = alloca (len * sizeof (wchar_t)); 6825 params_w = alloca (len * sizeof (wchar_t));
6822 MultiByteToWideChar (CP_UTF8, MB_ERR_INVALID_CHARS, 6826 MultiByteToWideChar (CP_ACP, MB_ERR_INVALID_CHARS,
6823 SSDATA (parameters), -1, params_w, len); 6827 SSDATA (parameters), -1, params_w, len);
6824 } 6828 }
6825 if (STRINGP (operation)) 6829 if (STRINGP (operation))
@@ -6827,7 +6831,7 @@ an integer representing a ShowWindow flag:
6827 /* Assume OPERATION is pure ASCII. */ 6831 /* Assume OPERATION is pure ASCII. */
6828 const char *s = SSDATA (operation); 6832 const char *s = SSDATA (operation);
6829 wchar_t *d; 6833 wchar_t *d;
6830 int len = SBYTES (operation); 6834 int len = SBYTES (operation) + 1;
6831 6835
6832 if (len > 32768) 6836 if (len > 32768)
6833 len = 32768; 6837 len = 32768;
@@ -6849,25 +6853,16 @@ an integer representing a ShowWindow flag:
6849 filename_to_ansi (SSDATA (current_dir), current_dir_a); 6853 filename_to_ansi (SSDATA (current_dir), current_dir_a);
6850 if (STRINGP (document)) 6854 if (STRINGP (document))
6851 { 6855 {
6856 ENCODE_FILE (document);
6852 filename_to_ansi (SSDATA (document), document_a); 6857 filename_to_ansi (SSDATA (document), document_a);
6853 doc_a = document_a; 6858 doc_a = document_a;
6854 } 6859 }
6855 if (STRINGP (parameters)) 6860 if (STRINGP (parameters))
6856 { 6861 {
6857 int len = MultiByteToWideChar (CP_UTF8, MB_ERR_INVALID_CHARS, 6862 int len;
6858 SSDATA (parameters), -1, NULL, 0); 6863
6859 if (len > 32768) 6864 parameters = ENCODE_SYSTEM (parameters);
6860 len = 32768; 6865 params_a = SSDATA (parameters);
6861 params_w = alloca (len * sizeof (wchar_t));
6862 MultiByteToWideChar (CP_UTF8, MB_ERR_INVALID_CHARS,
6863 SSDATA (parameters), -1, params_w, len);
6864 len = WideCharToMultiByte (CP_ACP, 0, params_w, -1, NULL, 0,
6865 NULL, NULL);
6866 if (len > 32768)
6867 len = 32768;
6868 params_a = alloca (len);
6869 WideCharToMultiByte (CP_ACP, 0, params_w, -1, params_a, len,
6870 NULL, NULL);
6871 } 6866 }
6872 if (STRINGP (operation)) 6867 if (STRINGP (operation))
6873 { 6868 {