mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
52c034aecb
Includes patches by Hugh Sasse: * ping.rb * weakref.rb * mailread.rb git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@10668 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
41 lines
835 B
Ruby
41 lines
835 B
Ruby
# TruncatedDataError is raised when IO#readbytes fails to read enough data.
|
|
|
|
class TruncatedDataError<IOError
|
|
def initialize(mesg, data) # :nodoc:
|
|
@data = data
|
|
super(mesg)
|
|
end
|
|
|
|
# The read portion of an IO#readbytes attempt.
|
|
attr_reader :data
|
|
end
|
|
|
|
class IO
|
|
# Reads exactly +n+ bytes.
|
|
#
|
|
# If the data read is nil an EOFError is raised.
|
|
#
|
|
# If the data read is too short a TruncatedDataError is raised and the read
|
|
# data is obtainable via its #data method.
|
|
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
|