* 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
Родитель 62b368dc4a
Коммит c5d4ee4a39
3 изменённых файлов: 43 добавлений и 25 удалений

Просмотреть файл

@ -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>
* lib/erb.rb: new method ERB#filename(=). [ruby-dev:22208]

Просмотреть файл

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

Просмотреть файл

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