aboutsummaryrefslogtreecommitdiffstats
path: root/src/w32fns.c
diff options
context:
space:
mode:
authorEli Zaretskii <[email protected]>2013-11-30 16:27:46 +0200
committerEli Zaretskii <[email protected]>2013-11-30 16:27:46 +0200
commit9f9974b4e090f092e9b66b0e4189cc5e59ed2133 (patch)
tree338825e5704a2dc7db356f467cdbad6959272bd3 /src/w32fns.c
parentff0c63f29a2dde0022cd7aad32ead28d7b5ac43d (diff)
Debugged and fixed w32-shell-execute.
Diffstat (limited to 'src/w32fns.c')
-rw-r--r--src/w32fns.c31
1 files changed, 13 insertions, 18 deletions
diff --git a/src/w32fns.c b/src/w32fns.c
index 1acf5cb6ef..4664ea79a1 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -6809,17 +6809,21 @@ an integer representing a ShowWindow flag:
filename_to_utf16 (SSDATA (current_dir), current_dir_w);
if (STRINGP (document))
{
+ document = ENCODE_FILE (document);
filename_to_utf16 (SSDATA (document), document_w);
doc_w = document_w;
}
if (STRINGP (parameters))
{
- int len = MultiByteToWideChar (CP_UTF8, MB_ERR_INVALID_CHARS,
- SSDATA (parameters), -1, NULL, 0);
+ int len;
+
+ parameters = ENCODE_SYSTEM (parameters);
+ len = MultiByteToWideChar (CP_ACP, MB_ERR_INVALID_CHARS,
+ SSDATA (parameters), -1, NULL, 0);
if (len > 32768)
len = 32768;
params_w = alloca (len * sizeof (wchar_t));
- MultiByteToWideChar (CP_UTF8, MB_ERR_INVALID_CHARS,
+ MultiByteToWideChar (CP_ACP, MB_ERR_INVALID_CHARS,
SSDATA (parameters), -1, params_w, len);
}
if (STRINGP (operation))
@@ -6827,7 +6831,7 @@ an integer representing a ShowWindow flag:
/* Assume OPERATION is pure ASCII. */
const char *s = SSDATA (operation);
wchar_t *d;
- int len = SBYTES (operation);
+ int len = SBYTES (operation) + 1;
if (len > 32768)
len = 32768;
@@ -6849,25 +6853,16 @@ an integer representing a ShowWindow flag:
filename_to_ansi (SSDATA (current_dir), current_dir_a);
if (STRINGP (document))
{
+ ENCODE_FILE (document);
filename_to_ansi (SSDATA (document), document_a);
doc_a = document_a;
}
if (STRINGP (parameters))
{
- int len = MultiByteToWideChar (CP_UTF8, MB_ERR_INVALID_CHARS,
- SSDATA (parameters), -1, NULL, 0);
- if (len > 32768)
- len = 32768;
- params_w = alloca (len * sizeof (wchar_t));
- MultiByteToWideChar (CP_UTF8, MB_ERR_INVALID_CHARS,
- SSDATA (parameters), -1, params_w, len);
- len = WideCharToMultiByte (CP_ACP, 0, params_w, -1, NULL, 0,
- NULL, NULL);
- if (len > 32768)
- len = 32768;
- params_a = alloca (len);
- WideCharToMultiByte (CP_ACP, 0, params_w, -1, params_a, len,
- NULL, NULL);
+ int len;
+
+ parameters = ENCODE_SYSTEM (parameters);
+ params_a = SSDATA (parameters);
}
if (STRINGP (operation))
{