diff options
author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-02-25 09:58:20 +0000 |
---|---|---|
committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-02-25 09:58:20 +0000 |
commit | 784005805cd879ef3e51111f778e74741fb0ba0b (patch) | |
tree | 372f4bcaf3f1d95e94a828fb32a5928e400cf454 /process.c | |
parent | cfdb3f5c264ebf1dde0845015b567b2aded894de (diff) |
merge revision(s) 53346,53347,53348,53349,53391,53928: [Backport #11898]
* process.c: use rb_w32_uchdir() instead of plain chdir() on Windows.
reported by naruse via twitter.
* process.c (rb_execarg_addopt): need to convert to ospath.
* process.c (rb_execarg_parent_start1): need to convert the encoding to
ospath's one.
* process.c (rb_execarg_addopt): need to convert the encoding to
ospath's one.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@53929 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'process.c')
-rw-r--r-- | process.c | 13 |
1 files changed, 11 insertions, 2 deletions
@@ -1753,6 +1753,7 @@ rb_execarg_addopt(VALUE execarg_obj, VALUE key, VALUE val) rb_raise(rb_eArgError, "chdir option specified twice"); } FilePathValue(val); + val = rb_str_encode_ospath(val); eargp->chdir_given = 1; eargp->chdir_dir = hide_obj(EXPORT_DUP(val)); } @@ -2793,11 +2794,14 @@ run_exec_open(VALUE ary, struct rb_execarg *sargp, char *errmsg, size_t errmsg_b VALUE elt = RARRAY_AREF(ary, i); int fd = FIX2INT(RARRAY_AREF(elt, 0)); VALUE param = RARRAY_AREF(elt, 1); - char *path = RSTRING_PTR(RARRAY_AREF(param, 0)); + VALUE vpath = RARRAY_AREF(param, 0); int flags = NUM2INT(RARRAY_AREF(param, 1)); int perm = NUM2INT(RARRAY_AREF(param, 2)); int need_close = 1; - int fd2 = redirect_open(path, flags, perm); /* async-signal-safe */ + int fd2; + FilePathValue(vpath); + vpath = rb_str_encode_ospath(vpath); + fd2 = redirect_open(RSTRING_PTR(vpath), flags, perm); /* async-signal-safe */ if (fd2 == -1) { ERRMSG("open"); return -1; @@ -2952,6 +2956,11 @@ save_env(struct rb_execarg *sargp) } #endif +#ifdef _WIN32 +#undef chdir +#define chdir(p) rb_w32_uchdir(p) +#endif + /* This function should be async-signal-safe when sargp is NULL. Hopefully it is. */ int rb_execarg_run_options(const struct rb_execarg *eargp, struct rb_execarg *sargp, char *errmsg, size_t errmsg_buflen) |