From c1004b095ebff679e1b4d3adec9af54054b070df Mon Sep 17 00:00:00 2001 From: Tim Schumacher Date: Mon, 14 Mar 2022 17:59:03 +0100 Subject: [PATCH] grep: Adapt maximum line size depending on file size Otherwise, we would never stop trying to fetch new lines if the next newline is found beyond a range that the (default sized) buffer can hold. --- Userland/Utilities/grep.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Userland/Utilities/grep.cpp b/Userland/Utilities/grep.cpp index eb9fe2cdcd..0144de8ce9 100644 --- a/Userland/Utilities/grep.cpp +++ b/Userland/Utilities/grep.cpp @@ -195,8 +195,17 @@ ErrorOr serenity_main(Main::Arguments args) return false; } + auto file_size_or_error = Core::File::size(filename); + if (file_size_or_error.is_error()) { + if (!suppress_errors) + warnln("Failed to retrieve size of {}: {}", filename, strerror(file_size_or_error.error().code())); + return false; + } + + auto file_size = file_size_or_error.release_value(); + for (size_t line_number = 1; file->can_read_line(); ++line_number) { - auto line = file->read_line(); + auto line = file->read_line(file_size); auto is_binary = memchr(line.characters(), 0, line.length()) != nullptr; if (matches(line, filename, line_number, print_filename, is_binary) && is_binary && binary_mode == BinaryFileMode::Binary)