1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* ext/stringio/stringio.c (strio_read): set EOF flag at short read.

[ruby-dev:22223], [ruby-dev:22224]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5162 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2003-12-10 10:29:00 +00:00
parent 62b368dc4a
commit c5d4ee4a39
3 changed files with 43 additions and 25 deletions

View file

@ -1,3 +1,8 @@
Wed Dec 10 19:28:56 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
* ext/stringio/stringio.c (strio_read): set EOF flag at short read.
[ruby-dev:22223], [ruby-dev:22224]
Wed Dec 10 18:07:25 2003 Minero Aoki <aamine@loveruby.net> Wed Dec 10 18:07:25 2003 Minero Aoki <aamine@loveruby.net>
* lib/erb.rb: new method ERB#filename(=). [ruby-dev:22208] * lib/erb.rb: new method ERB#filename(=). [ruby-dev:22208]

View file

@ -857,10 +857,13 @@ strio_read(argc, argv, self)
/* fall through */ /* fall through */
case 0: case 0:
olen = -1; olen = -1;
len = RSTRING(ptr->string)->len - ptr->pos; len = RSTRING(ptr->string)->len;
if (len == 0 && ptr->pos == RSTRING(ptr->string)->len) { if (len <= ptr->pos) {
if (ptr->flags & STRIO_EOF) return Qnil; if (ptr->flags & STRIO_EOF) return Qnil;
ptr->flags |= STRIO_EOF; len = 0;
}
else {
len -= ptr->pos;
} }
break; break;
default: default:
@ -869,11 +872,12 @@ strio_read(argc, argv, self)
str = rb_str_substr(ptr->string, ptr->pos, len); str = rb_str_substr(ptr->string, ptr->pos, len);
if (NIL_P(str)) { if (NIL_P(str)) {
if (!(ptr->flags & STRIO_EOF)) str = rb_str_new(0, 0); if (!(ptr->flags & STRIO_EOF)) str = rb_str_new(0, 0);
if (olen) ptr->flags |= STRIO_EOF; len = 0;
} }
else { else {
ptr->pos += RSTRING(str)->len; ptr->pos += len = RSTRING(str)->len;
} }
if (olen < 0 || olen > len) ptr->flags |= STRIO_EOF;
return str; return str;
} }

View file

@ -6,13 +6,13 @@ module TestEOF
assert_equal("", f.read(0)) assert_equal("", f.read(0))
assert_equal("", f.read(0)) assert_equal("", f.read(0))
assert_equal("", f.read) assert_equal("", f.read)
assert_equal(nil, f.read(0)) assert_nil(f.read(0))
assert_equal(nil, f.read(0)) assert_nil(f.read(0))
} }
open_file("") {|f| open_file("") {|f|
assert_equal(nil, f.read(1)) assert_nil(f.read(1))
assert_equal(nil, f.read) assert_nil(f.read)
assert_equal(nil, f.read(1)) assert_nil(f.read(1))
} }
end end
@ -20,9 +20,9 @@ module TestEOF
return unless respond_to? :open_file_rw return unless respond_to? :open_file_rw
open_file_rw("") {|f| open_file_rw("") {|f|
assert_equal("", f.read) assert_equal("", f.read)
assert_equal(nil, f.read) assert_nil(f.read)
assert_equal(0, f.syswrite("")) assert_equal(0, f.syswrite(""))
assert_equal(nil, f.read) assert_nil(f.read)
} }
end end
@ -33,24 +33,33 @@ module TestEOF
assert_equal("" , f.read(0)) assert_equal("" , f.read(0))
assert_equal("" , f.read(0)) assert_equal("" , f.read(0))
assert_equal("", f.read) assert_equal("", f.read)
assert_equal(nil, f.read(0)) assert_nil(f.read(0))
assert_equal(nil, f.read(0)) assert_nil(f.read(0))
} }
open_file("a") {|f| open_file("a") {|f|
assert_equal("a", f.read(1)) assert_equal("a", f.read(1))
assert_equal(nil, f.read(1)) assert_nil(f.read(1))
} }
open_file("a") {|f| open_file("a") {|f|
assert_equal("a", f.read(2)) assert_equal("a", f.read(2))
assert_equal(nil, f.read(1)) assert_nil(f.read(1))
assert_equal(nil, f.read) assert_nil(f.read)
assert_equal(nil, f.read(1)) assert_nil(f.read(1))
} }
open_file("a") {|f| open_file("a") {|f|
assert_equal("a", f.read) assert_equal("a", f.read)
assert_equal(nil, f.read(1)) assert_nil(f.read(1))
assert_equal(nil, f.read) assert_nil(f.read)
assert_equal(nil, f.read(1)) assert_nil(f.read(1))
}
open_file("a") {|f|
assert_equal("a", f.read(2))
assert_nil(f.read)
assert_nil(f.read)
}
open_file("a") {|f|
assert_equal("a", f.read)
assert_nil(f.read(0))
} }
end end
@ -67,19 +76,19 @@ module TestEOF
assert_equal(10, f.pos) assert_equal(10, f.pos)
assert_equal("", f.read(0)) assert_equal("", f.read(0))
assert_equal("", f.read) assert_equal("", f.read)
assert_equal(nil, f.read(0)) assert_nil(f.read(0))
assert_equal(nil, f.read) assert_nil(f.read)
} }
end end
def test_eof_1_seek def test_eof_1_seek
open_file_seek("a", 10) {|f| open_file_seek("a", 10) {|f|
assert_equal("", f.read) assert_equal("", f.read)
assert_equal(nil, f.read) assert_nil(f.read)
} }
open_file_seek("a", 1) {|f| open_file_seek("a", 1) {|f|
assert_equal("", f.read) assert_equal("", f.read)
assert_equal(nil, f.read) assert_nil(f.read)
} }
end end
end end