diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-07-03 07:06:51 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-07-03 07:06:51 +0000 |
commit | ab801dbdb7ff8a99b5e0976516b879b27bcf3e1b (patch) | |
tree | 2657a1ca78c166beda5dfb609f9c53c5bae6f85c /lib/readbytes.rb | |
parent | 1a2003d1f176001f4c691d14a080e722bb12fc7b (diff) |
1.1b9_29
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@260 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 |