30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/qio/queued_input_io.rb', line 30
def sysread(maxlen, outbuf=nil)
q = @deque
raise EOFError if eof?
outbuf ||= ""
consume_readable do
raise EOFError if eof?
data = @deque.shift
raise SystemCallError if data.nil? || data.empty?
if data.bytesize <= maxlen
outbuf.replace(data)
pos += outbuf.bytesize
else
outbuf.replace(data.byteslice(0, maxlen))
@deque.unshift(data.byteslice(maxlen .. -1))
pos += maxlen
end
@deque.any?
end
outbuf
end
|