зеркало из https://github.com/github/ruby.git
* 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:
Родитель
62b368dc4a
Коммит
c5d4ee4a39
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче