diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1999-01-20 04:59:39 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1999-01-20 04:59:39 +0000 |
commit | 62e648e148b3cb9f96dcce808c55c02b7ccb4486 (patch) | |
tree | 9708892ece92e860d81559ab55e6b1f9400d7ffc /lib/readbytes.rb | |
parent | aeb049c573be4dc24dd20650f40e4777e0f698cf (diff) |
ruby 1.3 cycle
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/RUBY@372 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/readbytes.rb')
-rw-r--r-- | lib/readbytes.rb | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/readbytes.rb b/lib/readbytes.rb new file mode 100644 index 0000000000..d6a3b10afe --- /dev/null +++ b/lib/readbytes.rb @@ -0,0 +1,36 @@ +# readbytes.rb +# +# add IO#readbytes, which reads fixed sized data. +# it guarantees read data size. + +class TruncatedDataError<IOError + def initialize(mesg, data) + @data = data + super(mesg) + end + attr_reader :data +end + +class IO + def readbytes(n) + str = read(n) + if str == nil + raise EOFError, "End of file reached" + end + if str.size < n + raise TruncatedDataError.new("data truncated", str) + end + str + end +end + +if __FILE__ == $0 + begin + loop do + print STDIN.readbytes(6) + end + rescue TruncatedDataError + p $!.data + raise + end +end |