# File lib/file/tail.rb, line 189
    def backward(n = 0, bufsiz = nil)
      if n <= 0
        seek(0, File::SEEK_END)
        return self
      end
      bufsiz ||= stat.blksize || 8192
      size = stat.size
      begin
        if bufsiz < size
          seek(0, File::SEEK_END)
          while n > 0 and tell > 0 do
            start = tell
            seek(-bufsiz, File::SEEK_CUR)
            buffer = read(bufsiz)
            n -= buffer.count("\n")
            seek(-bufsiz, File::SEEK_CUR)
          end
        else
          seek(0, File::SEEK_SET)
          buffer = read(size)
          n -= buffer.count("\n")
          seek(0, File::SEEK_SET)
        end
      rescue Errno::EINVAL
        size = tell
        retry
      end
      pos = -1
      while n < 0  # forward if we are too far back
        pos = buffer.index("\n", pos + 1)
        n += 1
      end
      seek(pos + 1, File::SEEK_CUR)
      self
    end