summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-03-08 19:45:39 +0000
committernagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-03-08 19:45:39 +0000
commit055c3336bea2af9dbf464734a9abc12c8bf4d42d (patch)
tree4dd84cb0bce6efd876496f4ce868d59bfafae9bf
parentebacc098943aab2e1d5e743f829f880621ea9833 (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_2@54043 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog13
-rw-r--r--process.c14
-rw-r--r--test/ruby/test_process.rb10
-rw-r--r--version.h2
4 files changed, 35 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 44483b6e3f..1bc249a5b5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+Wed Mar 9 04:21:02 2016 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * process.c (rb_execarg_parent_start1): need to convert the encoding to
+ ospath's one.
+
+Wed Mar 9 04:21:02 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.
+
Wed Mar 9 04:15:20 2016 Eric Wong <e@80x24.org>
* ext/stringio/stringio.c (strio_binmode): implement to set encoding
diff --git a/process.c b/process.c
index 25cdc1605b..7eeb104f91 100644
--- a/process.c
+++ b/process.c
@@ -1737,6 +1737,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));
}
@@ -2767,12 +2768,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);
- const VALUE vpath = RARRAY_AREF(param, 0);
- const char *path = RSTRING_PTR(vpath);
+ 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;
@@ -2928,6 +2931,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)
diff --git a/test/ruby/test_process.rb b/test/ruby/test_process.rb
index 471f73442c..a1e0810c90 100644
--- a/test/ruby/test_process.rb
+++ b/test/ruby/test_process.rb
@@ -420,6 +420,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
diff --git a/version.h b/version.h
index a72b0a3e00..55e8c2f0fa 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
#define RUBY_VERSION "2.2.5"
#define RUBY_RELEASE_DATE "2016-03-09"
-#define RUBY_PATCHLEVEL 247
+#define RUBY_PATCHLEVEL 248
#define RUBY_RELEASE_YEAR 2016
#define RUBY_RELEASE_MONTH 3