summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-05-10 16:05:13 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-05-10 16:05:13 +0000
commit64b6f2b2a14912f46c71377cb6281765072f6563 (patch)
treeed5844ad216921fc1bccab84b6735f17ca408c6d
parent9a10c9726115e7f3f31bb228ad41d5f17eecb5e5 (diff)
merge revision(s) 35594: [Backport #6422]
* io.c (io_unread): fix IO#pos with mode 'r' bug on Windows. If the end of reading buffer is CR, io_unread() needs to unread one more byte. [ruby-core:44874] [Bug #6401] * test/ruby/test_io_m17n.rb (TestIO_M17N#test_pos_with_buffer_end_cr): add a test for above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@35613 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog10
-rw-r--r--io.c6
-rw-r--r--test/ruby/test_io_m17n.rb16
-rw-r--r--version.h6
4 files changed, 35 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 8ad5f6eaf7..a195a116eb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+Fri May 11 01:04:54 2012 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+
+ * io.c (io_unread): fix IO#pos with mode 'r' bug on Windows.
+ If the end of reading buffer is CR, io_unread() needs to unread one
+ more byte.
+ [ruby-core:44874] [Bug #6401]
+
+ * test/ruby/test_io_m17n.rb (TestIO_M17N#test_pos_with_buffer_end_cr):
+ add a test for above.
+
Wed May 9 15:59:17 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
* configure.in (RUBY_WERROR_FLAG): append all warning flags which
diff --git a/io.c b/io.c
index bbe5da93e8..bdabcf78d3 100644
--- a/io.c
+++ b/io.c
@@ -302,6 +302,12 @@ io_unread(rb_io_t *fptr)
/* add extra offset for removed '\r' in rbuf */
extra_max = (long)(pos - fptr->rbuf.len);
p = fptr->rbuf.ptr + fptr->rbuf.off;
+
+ /* if the end of rbuf is '\r', rbuf doesn't have '\r' within rbuf.len */
+ if (*(fptr->rbuf.ptr + fptr->rbuf.capa - 1) == '\r') {
+ newlines++;
+ }
+
for (i = 0; i < fptr->rbuf.len; i++) {
if (*p == '\n') newlines++;
if (extra_max == newlines) break;
diff --git a/test/ruby/test_io_m17n.rb b/test/ruby/test_io_m17n.rb
index 560cd03def..98c9e2b41c 100644
--- a/test/ruby/test_io_m17n.rb
+++ b/test/ruby/test_io_m17n.rb
@@ -2363,6 +2363,22 @@ EOT
}
end if /mswin|mingw/ =~ RUBY_PLATFORM
+ def test_pos_with_buffer_end_cr
+ bug6401 = '[ruby-core:44874]'
+ with_tmpdir {
+ # Read buffer size is 8191. This generates '\r' at 8191.
+ lines = ["X" * 8187, "X"]
+ generate_file("tmp", lines.join("\r\n") + "\r\n")
+
+ open("tmp", "r") do |f|
+ lines.each do |line|
+ f.pos
+ assert_equal(line, f.readline.chomp, bug6401)
+ end
+ end
+ }
+ end if /mswin|mingw/ =~ RUBY_PLATFORM
+
def test_read_crlf_and_eof
bug6271 = '[ruby-core:44189]'
with_tmpdir {
diff --git a/version.h b/version.h
index bd1eec3fb9..3e96c2c2b6 100644
--- a/version.h
+++ b/version.h
@@ -1,10 +1,10 @@
#define RUBY_VERSION "1.9.3"
-#define RUBY_PATCHLEVEL 207
+#define RUBY_PATCHLEVEL 208
-#define RUBY_RELEASE_DATE "2012-05-09"
+#define RUBY_RELEASE_DATE "2012-05-11"
#define RUBY_RELEASE_YEAR 2012
#define RUBY_RELEASE_MONTH 5
-#define RUBY_RELEASE_DAY 9
+#define RUBY_RELEASE_DAY 11
#include "ruby/version.h"