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
def each_byte # :yields: byte while c = getc yield(c.ord) end end
def each_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