module OpenSSL::Buffering

def << (s)

def << (s)
  do_write(s)
  self
end

def << (s)

def << (s)
  do_write(s)
  self
end

def << (s)

def << (s)
  do_write(s)
  self
end

def close

def close
  flush rescue nil
  sysclose
end

def close

def close
  flush rescue nil
  sysclose
end

def close

def close
  flush rescue nil
  sysclose
end

def consume_rbuff(size=nil)

def consume_rbuff(size=nil)
  if @rbuffer.empty?
    nil
  else
    size = @rbuffer.size unless size
    ret = @rbuffer[0, size]
    @rbuffer[0, size] = ""
    ret
  end
end

def consume_rbuff(size=nil)

def consume_rbuff(size=nil)
  if @rbuffer.empty?
    nil
  else
    size = @rbuffer.size unless size
    ret = @rbuffer[0, size]
    @rbuffer[0, size] = ""
    ret
  end
end

def consume_rbuff(size=nil)

def consume_rbuff(size=nil)
  if @rbuffer.empty?
    nil
  else
    size = @rbuffer.size unless size
    ret = @rbuffer[0, size]
    @rbuffer[0, size] = ""
    ret
  end
end

def do_write(s)

def do_write(s)
  @wbuffer = "" unless defined? @wbuffer
  @wbuffer << s
  @sync ||= false
  if @sync or @wbuffer.size > BLOCK_SIZE or idx = @wbuffer.rindex($/)
    remain = idx ? idx + $/.size : @wbuffer.length
    nwritten = 0
    while remain > 0
      str = @wbuffer[nwritten,remain]
      begin
        nwrote = syswrite(str)
      rescue Errno::EAGAIN
        retry
      end
      remain -= nwrote
      nwritten += nwrote
    end
    @wbuffer[0,nwritten] = ""
  end
end

def do_write(s)

def do_write(s)
  @wbuffer = "" unless defined? @wbuffer
  @wbuffer << s
  @wbuffer.force_encoding(Encoding::BINARY)
  @sync ||= false
  if @sync or @wbuffer.size > BLOCK_SIZE or idx = @wbuffer.rindex($/)
    remain = idx ? idx + $/.size : @wbuffer.length
    nwritten = 0
    while remain > 0
      str = @wbuffer[nwritten,remain]
      begin
        nwrote = syswrite(str)
      rescue Errno::EAGAIN
        retry
      end
      remain -= nwrote
      nwritten += nwrote
    end
    @wbuffer[0,nwritten] = ""
  end
end

def do_write(s)

def do_write(s)
  @wbuffer = "" unless defined? @wbuffer
  @wbuffer << s
  @wbuffer.force_encoding(Encoding::BINARY)
  @sync ||= false
  if @sync or @wbuffer.size > BLOCK_SIZE or idx = @wbuffer.rindex($/)
    remain = idx ? idx + $/.size : @wbuffer.length
    nwritten = 0
    while remain > 0
      str = @wbuffer[nwritten,remain]
      begin
        nwrote = syswrite(str)
      rescue Errno::EAGAIN
        retry
      end
      remain -= nwrote
      nwritten += nwrote
    end
    @wbuffer[0,nwritten] = ""
  end
end

def each(eol=$/)

def each(eol=$/)
  while line = self.gets(eol)
    yield line
  end
end

def each(eol=$/)

def each(eol=$/)
  while line = self.gets(eol)
    yield line
  end
end

def each(eol=$/)

def each(eol=$/)
  while line = self.gets(eol)
    yield line
  end
end

def each_byte

def each_byte
  while c = getc
    yield(c)
  end
end

def each_byte # :yields: byte

:yields: byte
def each_byte # :yields: byte
  while c = getc
    yield(c.ord)
  end
end

def each_byte # :yields: byte

:yields: byte
def each_byte # :yields: byte
  while c = getc
    yield(c.ord)
  end
end

def eof?

def eof?
  fill_rbuff if !@eof && @rbuffer.empty?
  @eof && @rbuffer.empty?
end

def eof?

def eof?
  fill_rbuff if !@eof && @rbuffer.empty?
  @eof && @rbuffer.empty?
end

def eof?

def eof?
  fill_rbuff if !@eof && @rbuffer.empty?
  @eof && @rbuffer.empty?
end

def fill_rbuff

def fill_rbuff
  begin
    @rbuffer << self.sysread(BLOCK_SIZE)
  rescue Errno::EAGAIN
    retry
  rescue EOFError
    @eof = true
  end
end

def fill_rbuff

def fill_rbuff
  begin
    @rbuffer << self.sysread(BLOCK_SIZE)
  rescue Errno::EAGAIN
    retry
  rescue EOFError
    @eof = true
  end
end

def fill_rbuff

def fill_rbuff
  begin
    @rbuffer << self.sysread(BLOCK_SIZE)
  rescue Errno::EAGAIN
    retry
  rescue EOFError
    @eof = true
  end
end

def flush

def flush
  osync = @sync
  @sync = true
  do_write ""
  @sync = osync
end

def flush

def flush
  osync = @sync
  @sync = true
  do_write ""
  return self
ensure
  @sync = osync
end

def flush

def flush
  osync = @sync
  @sync = true
  do_write ""
  return self
ensure
  @sync = osync
end

def getc

def getc
  c = read(1)
  c ? c[0] : nil
end

def getc

def getc
  read(1)
end

def getc

def getc
  read(1)
end

def gets(eol=$/)

def gets(eol=$/)
  idx = @rbuffer.index(eol)
  until @eof
    break if idx
    fill_rbuff
    idx = @rbuffer.index(eol)
  end
  if eol.is_a?(Regexp)
    size = idx ? idx+$&.size : nil
  else
    size = idx ? idx+eol.size : nil
  end
  consume_rbuff(size)
end

def gets(eol=$/, limit=nil)

def gets(eol=$/, limit=nil)
  idx = @rbuffer.index(eol)
  until @eof
    break if idx
    fill_rbuff
    idx = @rbuffer.index(eol)
  end
  if eol.is_a?(Regexp)
    size = idx ? idx+$&.size : nil
  else
    size = idx ? idx+eol.size : nil
  end
  if limit and limit >= 0
    size = [size, limit].min
  end
  consume_rbuff(size)
end

def gets(eol=$/, limit=nil)

def gets(eol=$/, limit=nil)
  idx = @rbuffer.index(eol)
  until @eof
    break if idx
    fill_rbuff
    idx = @rbuffer.index(eol)
  end
  if eol.is_a?(Regexp)
    size = idx ? idx+$&.size : nil
  else
    size = idx ? idx+eol.size : nil
  end
  if limit and limit >= 0
    size = [size, limit].min
  end
  consume_rbuff(size)
end

def initialize(*args)

def initialize(*args)
  @eof = false
  @rbuffer = ""
  @sync = @io.sync
end

def initialize(*args)

def initialize(*args)
  @eof = false
  @rbuffer = ""
  @sync = @io.sync
end

def initialize(*args)

def initialize(*args)
  @eof = false
  @rbuffer = ""
  @sync = @io.sync
end

def print(*args)

def print(*args)
  s = ""
  args.each{ |arg| s << arg.to_s }
  do_write(s)
  nil
end

def print(*args)

def print(*args)
  s = ""
  args.each{ |arg| s << arg.to_s }
  do_write(s)
  nil
end

def print(*args)

def print(*args)
  s = ""
  args.each{ |arg| s << arg.to_s }
  do_write(s)
  nil
end

def printf(s, *args)

def printf(s, *args)
  do_write(s % args)
  nil
end

def printf(s, *args)

def printf(s, *args)
  do_write(s % args)
  nil
end

def printf(s, *args)

def printf(s, *args)
  do_write(s % args)
  nil
end

def puts(*args)

def puts(*args)
  s = ""
  if args.empty?
    s << "\n"
  end
  args.each{|arg|
    s << arg.to_s
    if $/ && /\n\z/ !~ s
      s << "\n"
    end
  }
  do_write(s)
  nil
end

def puts(*args)

def puts(*args)
  s = ""
  if args.empty?
    s << "\n"
  end
  args.each{|arg|
    s << arg.to_s
    if $/ && /\n\z/ !~ s
      s << "\n"
    end
  }
  do_write(s)
  nil
end

def puts(*args)

def puts(*args)
  s = ""
  if args.empty?
    s << "\n"
  end
  args.each{|arg|
    s << arg.to_s
    if $/ && /\n\z/ !~ s
      s << "\n"
    end
  }
  do_write(s)
  nil
end

def read(size=nil, buf=nil)

def read(size=nil, buf=nil)
  if size == 0
    if buf
      buf.clear
    else
      buf = ""
    end
    return @eof ? nil : buf
  end
  until @eof
    break if size && size <= @rbuffer.size
    fill_rbuff
  end
  ret = consume_rbuff(size) || ""
  if buf
    buf.replace(ret)
    ret = buf
  end
  (size && ret.empty?) ? nil : ret
end

def read(size=nil, buf=nil)

def read(size=nil, buf=nil)
  if size == 0
    if buf
      buf.clear
      return buf
    else
      return ""
    end
  end
  until @eof
    break if size && size <= @rbuffer.size
    fill_rbuff
  end
  ret = consume_rbuff(size) || ""
  if buf
    buf.replace(ret)
    ret = buf
  end
  (size && ret.empty?) ? nil : ret
end

def read(size=nil, buf=nil)

def read(size=nil, buf=nil)
  if size == 0
    if buf
      buf.clear
      return buf
    else
      return ""
    end
  end
  until @eof
    break if size && size <= @rbuffer.size
    fill_rbuff
  end
  ret = consume_rbuff(size) || ""
  if buf
    buf.replace(ret)
    ret = buf
  end
  (size && ret.empty?) ? nil : ret
end

def read_nonblock(maxlen, buf=nil)

def read_nonblock(maxlen, buf=nil)
  if maxlen == 0
    if buf
      buf.clear
      return buf
    else
      return ""
    end
  end
  if @rbuffer.empty?
    return sysread_nonblock(maxlen, buf)
  end
  ret = consume_rbuff(maxlen)
  if buf
    buf.replace(ret)
    ret = buf
  end
  raise EOFError if ret.empty?
  ret
end

def read_nonblock(maxlen, buf=nil, exception: true)

def read_nonblock(maxlen, buf=nil, exception: true)
  if maxlen == 0
    if buf
      buf.clear
      return buf
    else
      return ""
    end
  end
  if @rbuffer.empty?
    return sysread_nonblock(maxlen, buf, exception: exception)
  end
  ret = consume_rbuff(maxlen)
  if buf
    buf.replace(ret)
    ret = buf
  end
  raise EOFError if ret.empty?
  ret
end

def readchar

def readchar
  raise EOFError if eof?
  getc
end

def readchar

def readchar
  raise EOFError if eof?
  getc
end

def readchar

def readchar
  raise EOFError if eof?
  getc
end

def readline(eol=$/)

def readline(eol=$/)
  raise EOFError if eof?
  gets(eol)
end

def readline(eol=$/)

def readline(eol=$/)
  raise EOFError if eof?
  gets(eol)
end

def readline(eol=$/)

def readline(eol=$/)
  raise EOFError if eof?
  gets(eol)
end

def readlines(eol=$/)

def readlines(eol=$/)
  ary = []
  while line = self.gets(eol)
    ary << line
  end
  ary
end

def readlines(eol=$/)

def readlines(eol=$/)
  ary = []
  while line = self.gets(eol)
    ary << line
  end
  ary
end

def readlines(eol=$/)

def readlines(eol=$/)
  ary = []
  while line = self.gets(eol)
    ary << line
  end
  ary
end

def readpartial(maxlen, buf=nil)

def readpartial(maxlen, buf=nil)
  if maxlen == 0
    if buf
      buf.clear
    else
      buf = ""
    end
    return @eof ? nil : buf
  end
  if @rbuffer.empty?
    begin
      return sysread(maxlen, buf)
    rescue Errno::EAGAIN
      retry
    end
  end
  ret = consume_rbuff(maxlen)
  if buf
    buf.replace(ret)
    ret = buf
  end
  raise EOFError if ret.empty?
  ret
end

def readpartial(maxlen, buf=nil)

def readpartial(maxlen, buf=nil)
  if maxlen == 0
    if buf
      buf.clear
      return buf
    else
      return ""
    end
  end
  if @rbuffer.empty?
    begin
      return sysread(maxlen, buf)
    rescue Errno::EAGAIN
      retry
    end
  end
  ret = consume_rbuff(maxlen)
  if buf
    buf.replace(ret)
    ret = buf
  end
  raise EOFError if ret.empty?
  ret
end

def readpartial(maxlen, buf=nil)

def readpartial(maxlen, buf=nil)
  if maxlen == 0
    if buf
      buf.clear
      return buf
    else
      return ""
    end
  end
  if @rbuffer.empty?
    begin
      return sysread(maxlen, buf)
    rescue Errno::EAGAIN
      retry
    end
  end
  ret = consume_rbuff(maxlen)
  if buf
    buf.replace(ret)
    ret = buf
  end
  raise EOFError if ret.empty?
  ret
end

def ungetc(c)

def ungetc(c)
  @rbuffer[0,0] = c.chr
end

def ungetc(c)

def ungetc(c)
  @rbuffer[0,0] = c.chr
end

def ungetc(c)

def ungetc(c)
  @rbuffer[0,0] = c.chr
end

def write(s)

def write(s)
  do_write(s)
  s.length
end

def write(s)

def write(s)
  do_write(s)
  s.bytesize
end

def write(s)

def write(s)
  do_write(s)
  s.bytesize
end

def write_nonblock(s)

def write_nonblock(s)
  flush
  syswrite_nonblock(s)
end

def write_nonblock(s, exception: true)

def write_nonblock(s, exception: true)
  flush
  syswrite_nonblock(s, exception: exception)
end