diff --git a/lib/net/sftp/operations/file.rb b/lib/net/sftp/operations/file.rb index d031050..b9f1bf4 100644 --- a/lib/net/sftp/operations/file.rb +++ b/lib/net/sftp/operations/file.rb @@ -99,8 +99,9 @@ def gets(sep_or_limit=$/, limit=Float::INFINITY) sep_string end + search_from = 0 loop do - at = @buffer.index(delim) if delim + at = @buffer.index(delim, search_from) if delim if at offset = [at + delim.length, lim].min @pos += offset @@ -110,11 +111,14 @@ def gets(sep_or_limit=$/, limit=Float::INFINITY) @pos += lim line, @buffer = @buffer[0,lim], @buffer[lim..-1] return line - elsif !fill - return nil if @buffer.empty? - @pos += @buffer.length - line, @buffer = @buffer, "" - return line + else + search_from = [@buffer.length - delim.length + 1, 0].max if delim + unless fill + return nil if @buffer.empty? + @pos += @buffer.length + line, @buffer = @buffer, "" + return line + end end end end