Method: QIO::QueuedInputIO#sysread

Defined in:
lib/qio/queued_input_io.rb

#sysread(maxlen, outbuf = nil) ⇒ Object

Raises:

  • (EOFError)


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