1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

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
This commit is contained in:
usa 2016-02-25 09:58:20 +00:00
parent cfdb3f5c26
commit 784005805c
4 changed files with 35 additions and 3 deletions

View file

@ -1,3 +1,16 @@
Thu Feb 25 18:36:26 2016 NAKAMURA Usaku <usa@ruby-lang.org>
* process.c (rb_execarg_parent_start1): need to convert the encoding to
ospath's one.
Thu Feb 25 18:36:26 2016 NAKAMURA Usaku <usa@ruby-lang.org>
* 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 the encoding to
ospath's one.
Thu Feb 25 18:21:55 2016 Eric Wong <e@80x24.org>
* ext/stringio/stringio.c (strio_binmode): implement to set encoding

View file

@ -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)

View file

@ -413,6 +413,16 @@ class TestProcess < Test::Unit::TestCase
}
end
def test_execopts_open_chdir_m17n_path
with_tmpchdir {|d|
Dir.mkdir "テスト"
system(*PWD, :chdir => "テスト", :out => "open_chdir_テスト")
assert_file.exist?("open_chdir_テスト")
assert_file.not_exist?("テスト/open_chdir_テスト")
assert_equal("#{d}/テスト", File.read("open_chdir_テスト").chomp.encode(__ENCODING__))
}
end if windows? || Encoding.find('locale') == Encoding::UTF_8
UMASK = [RUBY, '-e', 'printf "%04o\n", File.umask']
def test_execopts_umask

View file

@ -1,6 +1,6 @@
#define RUBY_VERSION "2.1.9"
#define RUBY_RELEASE_DATE "2016-02-25"
#define RUBY_PATCHLEVEL 449
#define RUBY_PATCHLEVEL 450
#define RUBY_RELEASE_YEAR 2016
#define RUBY_RELEASE_MONTH 2