mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
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
This commit is contained in:
parent
a65261c2c1
commit
64d39448d3
3 changed files with 35 additions and 5 deletions
|
@ -1,4 +1,10 @@
|
||||||
Sun Jun 30 10:58:57 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Sun Jun 30 10:59:00 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
* win32/win32.c (w32_getenv): extract codepage aware code from
|
* win32/win32.c (w32_getenv): extract codepage aware code from
|
||||||
rb_w32_ugetenv() and rb_w32_getenv().
|
rb_w32_ugetenv() and rb_w32_getenv().
|
||||||
|
|
|
@ -316,6 +316,8 @@ extern rb_pid_t waitpid (rb_pid_t, int *, int);
|
||||||
extern rb_pid_t rb_w32_spawn(int, const char *, const char*);
|
extern rb_pid_t rb_w32_spawn(int, const char *, const char*);
|
||||||
extern rb_pid_t rb_w32_aspawn(int, const char *, char *const *);
|
extern rb_pid_t rb_w32_aspawn(int, const char *, char *const *);
|
||||||
extern rb_pid_t rb_w32_aspawn_flags(int, const char *, char *const *, DWORD);
|
extern rb_pid_t rb_w32_aspawn_flags(int, const char *, char *const *, DWORD);
|
||||||
|
extern rb_pid_t rb_w32_uaspawn(int, const char *, char *const *);
|
||||||
|
extern rb_pid_t rb_w32_uaspawn_flags(int, const char *, char *const *, DWORD);
|
||||||
extern int kill(int, int);
|
extern int kill(int, int);
|
||||||
extern int fcntl(int, int, ...);
|
extern int fcntl(int, int, ...);
|
||||||
extern rb_pid_t rb_w32_getpid(void);
|
extern rb_pid_t rb_w32_getpid(void);
|
||||||
|
|
|
@ -1287,7 +1287,7 @@ rb_w32_spawn(int mode, const char *cmd, const char *prog)
|
||||||
|
|
||||||
/* License: Artistic or GPL */
|
/* License: Artistic or GPL */
|
||||||
rb_pid_t
|
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;
|
int c_switch = 0;
|
||||||
size_t len;
|
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);
|
join_argv(cmd, argv, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* assume ACP */
|
if (!e && cmd && !(wcmd = mbstr_to_wstr(cp, cmd, -1, NULL))) e = E2BIG;
|
||||||
if (!e && cmd && !(wcmd = acp_to_wstr(cmd, NULL))) e = E2BIG;
|
|
||||||
if (v) ALLOCV_END(v);
|
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) {
|
if (!e) {
|
||||||
ret = child_result(CreateChild(wcmd, wprog, NULL, NULL, NULL, NULL, flags), mode);
|
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;
|
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_pid_t
|
||||||
rb_w32_aspawn(int mode, const char *prog, char *const *argv)
|
rb_w32_aspawn(int mode, const char *prog, char *const *argv)
|
||||||
{
|
{
|
||||||
return rb_w32_aspawn_flags(mode, prog, argv, 0);
|
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 */
|
/* License: Artistic or GPL */
|
||||||
typedef struct _NtCmdLineElement {
|
typedef struct _NtCmdLineElement {
|
||||||
struct _NtCmdLineElement *next;
|
struct _NtCmdLineElement *next;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue