summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog13
-rw-r--r--process.c7
-rw-r--r--test/ruby/test_process.rb10
-rw-r--r--version.h2
4 files changed, 31 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index a960725df8..4146f19d30 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+Tue Jan 12 17:23:39 2016 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * process.c (rb_execarg_parent_start1): need to convert the encoding to
+ ospath's one.
+
+Tue Jan 12 17:23:39 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.
+
Tue Jan 12 15:21:00 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
* include/ruby/missing.h (explicit_bzero_by_memset_s): remove
diff --git a/process.c b/process.c
index 0df7607fd7..e196639b87 100644
--- a/process.c
+++ b/process.c
@@ -1713,6 +1713,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));
}
@@ -2313,6 +2314,7 @@ rb_execarg_parent_start1(VALUE execarg_obj)
if (NIL_P(fd2v)) {
struct open_struct open_data;
FilePathValue(vpath);
+ vpath = rb_str_encode_ospath(vpath);
again:
open_data.fname = vpath;
open_data.oflags = flags;
@@ -2967,6 +2969,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 ca35d151a9..c8b4b7d343 100644
--- a/test/ruby/test_process.rb
+++ b/test/ruby/test_process.rb
@@ -425,6 +425,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
+
def test_execopts_open_failure
with_tmpchdir {|d|
assert_raise_with_message(Errno::ENOENT, %r"d/notexist") {
diff --git a/version.h b/version.h
index 3e58a42538..781cddc2d1 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
#define RUBY_VERSION "2.3.0"
#define RUBY_RELEASE_DATE "2016-01-12"
-#define RUBY_PATCHLEVEL 3
+#define RUBY_PATCHLEVEL 4
#define RUBY_RELEASE_YEAR 2016
#define RUBY_RELEASE_MONTH 1