From 64d39448d3ece0367a8ed2b94fd72b91895c34b6 Mon Sep 17 00:00:00 2001 From: nobu Date: Sun, 30 Jun 2013 01:59:03 +0000 Subject: win32.c: UTF-8 aspawn * win32/win32.c (w32_aspawn_flags): extract codepage aware code from rb_w32_aspawn_flags(). * win32/win32.c (rb_w32_uaspawn_flags, rb_w32_uaspawn_flags): add UTF-8 version functions. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41705 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- win32/win32.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'win32/win32.c') diff --git a/win32/win32.c b/win32/win32.c index 12b0678841..b1780c2be1 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -1287,7 +1287,7 @@ rb_w32_spawn(int mode, const char *cmd, const char *prog) /* License: Artistic or GPL */ rb_pid_t -rb_w32_aspawn_flags(int mode, const char *prog, char *const *argv, DWORD flags) +w32_aspawn_flags(int mode, const char *prog, char *const *argv, DWORD flags, UINT cp) { int c_switch = 0; size_t len; @@ -1342,10 +1342,9 @@ rb_w32_aspawn_flags(int mode, const char *prog, char *const *argv, DWORD flags) join_argv(cmd, argv, FALSE); } - /* assume ACP */ - if (!e && cmd && !(wcmd = acp_to_wstr(cmd, NULL))) e = E2BIG; + if (!e && cmd && !(wcmd = mbstr_to_wstr(cp, cmd, -1, NULL))) e = E2BIG; if (v) ALLOCV_END(v); - if (!e && prog && !(wprog = acp_to_wstr(prog, NULL))) e = E2BIG; + if (!e && prog && !(wprog = mbstr_to_wstr(cp, prog, -1, NULL))) e = E2BIG; if (!e) { ret = child_result(CreateChild(wcmd, wprog, NULL, NULL, NULL, NULL, flags), mode); @@ -1356,12 +1355,35 @@ rb_w32_aspawn_flags(int mode, const char *prog, char *const *argv, DWORD flags) return ret; } +/* License: Ruby's */ +rb_pid_t +rb_w32_aspawn_flags(int mode, const char *prog, char *const *argv, DWORD flags) +{ + /* assume ACP */ + return w32_aspawn_flags(mode, prog, argv, flags, filecp()); +} + +/* License: Ruby's */ +rb_pid_t +rb_w32_uaspawn_flags(int mode, const char *prog, char *const *argv, DWORD flags) +{ + return w32_aspawn_flags(mode, prog, argv, flags, CP_UTF8); +} + +/* License: Ruby's */ rb_pid_t rb_w32_aspawn(int mode, const char *prog, char *const *argv) { return rb_w32_aspawn_flags(mode, prog, argv, 0); } +/* License: Ruby's */ +rb_pid_t +rb_w32_uaspawn(int mode, const char *prog, char *const *argv) +{ + return rb_w32_uaspawn_flags(mode, prog, argv, 0); +} + /* License: Artistic or GPL */ typedef struct _NtCmdLineElement { struct _NtCmdLineElement *next; -- cgit v1.2.3