* dir.c (dir_chdir, check_dirname): get rid of optimization-out.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34348 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2012-01-21 02:43:48 +00:00
parent 338a3073bd
commit c3d6f8d74f
2 changed files with 11 additions and 10 deletions

View File

@ -1,3 +1,7 @@
Sat Jan 21 11:43:45 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
* dir.c (dir_chdir, check_dirname): get rid of optimization-out.
Fri Jan 20 20:47:37 2012 Kenta Murata <mrkn@cookpad.com> Fri Jan 20 20:47:37 2012 Kenta Murata <mrkn@cookpad.com>
* lib/cgi/util.rb (CGI.escape): support a string with invalid byte * lib/cgi/util.rb (CGI.escape): support a string with invalid byte

17
dir.c
View File

@ -749,7 +749,6 @@ dir_close(VALUE dir)
static void static void
dir_chdir(VALUE path) dir_chdir(VALUE path)
{ {
path = rb_str_encode_ospath(path);
if (chdir(RSTRING_PTR(path)) < 0) if (chdir(RSTRING_PTR(path)) < 0)
rb_sys_fail(RSTRING_PTR(path)); rb_sys_fail(RSTRING_PTR(path));
} }
@ -832,6 +831,7 @@ dir_s_chdir(int argc, VALUE *argv, VALUE obj)
rb_secure(2); rb_secure(2);
if (rb_scan_args(argc, argv, "01", &path) == 1) { if (rb_scan_args(argc, argv, "01", &path) == 1) {
FilePathValue(path); FilePathValue(path);
path = rb_str_encode_ospath(path);
} }
else { else {
const char *dist = getenv("HOME"); const char *dist = getenv("HOME");
@ -849,9 +849,8 @@ dir_s_chdir(int argc, VALUE *argv, VALUE obj)
if (rb_block_given_p()) { if (rb_block_given_p()) {
struct chdir_data args; struct chdir_data args;
char *cwd = my_getcwd();
args.old_path = rb_tainted_str_new2(cwd); xfree(cwd); args.old_path = rb_str_encode_ospath(rb_dir_getwd());
args.new_path = path; args.new_path = path;
args.done = FALSE; args.done = FALSE;
return rb_ensure(chdir_yield, (VALUE)&args, chdir_restore, (VALUE)&args); return rb_ensure(chdir_yield, (VALUE)&args, chdir_restore, (VALUE)&args);
@ -896,14 +895,16 @@ dir_s_getwd(VALUE dir)
static void static void
check_dirname(volatile VALUE *dir) check_dirname(volatile VALUE *dir)
{ {
VALUE d = *dir;
char *path, *pend; char *path, *pend;
rb_secure(2); rb_secure(2);
FilePathValue(*dir); FilePathValue(d);
path = RSTRING_PTR(*dir); path = RSTRING_PTR(d);
if (path && *(pend = rb_path_end(rb_path_skip_prefix(path)))) { if (path && *(pend = rb_path_end(rb_path_skip_prefix(path)))) {
*dir = rb_str_new(path, pend - path); d = rb_str_subseq(d, 0, pend - path);
} }
*dir = rb_str_encode_ospath(d);
} }
#if defined(HAVE_CHROOT) #if defined(HAVE_CHROOT)
@ -920,8 +921,6 @@ static VALUE
dir_s_chroot(VALUE dir, VALUE path) dir_s_chroot(VALUE dir, VALUE path)
{ {
check_dirname(&path); check_dirname(&path);
path = rb_str_encode_ospath(path);
if (chroot(RSTRING_PTR(path)) == -1) if (chroot(RSTRING_PTR(path)) == -1)
rb_sys_fail(RSTRING_PTR(path)); rb_sys_fail(RSTRING_PTR(path));
@ -960,7 +959,6 @@ dir_s_mkdir(int argc, VALUE *argv, VALUE obj)
} }
check_dirname(&path); check_dirname(&path);
path = rb_str_encode_ospath(path);
if (mkdir(RSTRING_PTR(path), mode) == -1) if (mkdir(RSTRING_PTR(path), mode) == -1)
rb_sys_fail(RSTRING_PTR(path)); rb_sys_fail(RSTRING_PTR(path));
@ -980,7 +978,6 @@ static VALUE
dir_s_rmdir(VALUE obj, VALUE dir) dir_s_rmdir(VALUE obj, VALUE dir)
{ {
check_dirname(&dir); check_dirname(&dir);
dir = rb_str_encode_ospath(dir);
if (rmdir(RSTRING_PTR(dir)) < 0) if (rmdir(RSTRING_PTR(dir)) < 0)
rb_sys_fail(RSTRING_PTR(dir)); rb_sys_fail(RSTRING_PTR(dir));