summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--io.c15
-rw-r--r--test/ruby/test_argf.rb13
-rw-r--r--version.h4
4 files changed, 30 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index b646e30e30..88c9745782 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Sep 7 23:42:45 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (argf_next_argv): open in default text mode.
+ [ruby-core:39234] [Bug #5268]
+
Mon Sep 5 15:06:55 2011 NARUSE, Yui <naruse@ruby-lang.org>
* test/rubygems/test_gem_security.rb
diff --git a/io.c b/io.c
index b0d4ff3ce2..acb6253e26 100644
--- a/io.c
+++ b/io.c
@@ -6840,6 +6840,7 @@ argf_next_argv(VALUE argf)
char *fn;
rb_io_t *fptr;
int stdout_binmode = 0;
+ int fmode;
if (TYPE(rb_stdout) == T_FILE) {
GetOpenFile(rb_stdout, fptr);
@@ -6948,19 +6949,25 @@ argf_next_argv(VALUE argf)
rb_stdout = write_io;
if (stdout_binmode) rb_io_binmode(rb_stdout);
}
- ARGF.current_file = prep_io(fr, FMODE_READABLE, rb_cFile, fn);
+ fmode = FMODE_READABLE;
+ if (!ARGF.binmode) fmode |= DEFAULT_TEXTMODE;
+ ARGF.current_file = prep_io(fr, fmode, rb_cFile, fn);
if (!NIL_P(write_io)) {
rb_io_set_write_io(ARGF.current_file, write_io);
}
}
if (ARGF.binmode) rb_io_ascii8bit_binmode(ARGF.current_file);
+ GetOpenFile(ARGF.current_file, fptr);
if (ARGF.encs.enc) {
- rb_io_t *fptr;
-
- GetOpenFile(ARGF.current_file, fptr);
fptr->encs = ARGF.encs;
clear_codeconv(fptr);
}
+ else {
+ fptr->encs.ecflags &= ~ECONV_NEWLINE_DECORATOR_MASK;
+ if (!ARGF.binmode) {
+ fptr->encs.ecflags |= ECONV_DEFAULT_NEWLINE_DECORATOR;
+ }
+ }
ARGF.next_p = 0;
}
else {
diff --git a/test/ruby/test_argf.rb b/test/ruby/test_argf.rb
index 0e709a204d..a033a74d32 100644
--- a/test/ruby/test_argf.rb
+++ b/test/ruby/test_argf.rb
@@ -648,12 +648,23 @@ class TestArgf < Test::Unit::TestCase
end
def test_binmode
+ bug5268 = '[ruby-core:39234]'
+ open(@t3.path, "wb") {|f| f.write "5\r\n6\r\n"}
ruby('-e', "ARGF.binmode; STDOUT.binmode; puts ARGF.read", @t1.path, @t2.path, @t3.path) do |f|
f.binmode
- assert_equal("1\n2\n3\n4\n5\n6\n", f.read)
+ assert_equal("1\n2\n3\n4\n5\r\n6\r\n", f.read, bug5268)
end
end
+ def test_textmode
+ bug5268 = '[ruby-core:39234]'
+ open(@t3.path, "wb") {|f| f.write "5\r\n6\r\n"}
+ ruby('-e', "STDOUT.binmode; puts ARGF.read", @t1.path, @t2.path, @t3.path) do |f|
+ f.binmode
+ assert_equal("1\n2\n3\n4\n5\n6\n", f.read, bug5268)
+ end
+ end unless IO::BINARY.zero?
+
def test_skip
ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
ARGF.skip
diff --git a/version.h b/version.h
index b6648b1746..6763142002 100644
--- a/version.h
+++ b/version.h
@@ -1,10 +1,10 @@
#define RUBY_VERSION "1.9.3"
#define RUBY_PATCHLEVEL -1
-#define RUBY_RELEASE_DATE "2011-09-05"
+#define RUBY_RELEASE_DATE "2011-09-07"
#define RUBY_RELEASE_YEAR 2011
#define RUBY_RELEASE_MONTH 9
-#define RUBY_RELEASE_DAY 5
+#define RUBY_RELEASE_DAY 7
#include "ruby/version.h"