From 21bbff03498de4d7029ec3b37a7ae96dad063332 Mon Sep 17 00:00:00 2001 From: Tim Schumacher Date: Mon, 14 Mar 2022 18:08:16 +0100 Subject: [PATCH] grep: Properly update match state when handling files --- Userland/Utilities/grep.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Userland/Utilities/grep.cpp b/Userland/Utilities/grep.cpp index 0144de8ce9..bfc26d14f1 100644 --- a/Userland/Utilities/grep.cpp +++ b/Userland/Utilities/grep.cpp @@ -186,8 +186,10 @@ ErrorOr serenity_main(Main::Arguments args) return false; }; + bool did_match_something = false; + auto handle_file = [&matches, binary_mode, suppress_errors, count_lines, quiet_mode, - user_specified_multiple_files, &matched_line_count](StringView filename, bool print_filename) -> bool { + user_specified_multiple_files, &matched_line_count, &did_match_something](StringView filename, bool print_filename) -> bool { auto file = Core::File::construct(filename); if (!file->open(Core::OpenMode::ReadOnly)) { if (!suppress_errors) @@ -208,7 +210,9 @@ ErrorOr serenity_main(Main::Arguments args) 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) + auto matched = matches(line, filename, line_number, print_filename, is_binary); + did_match_something = did_match_something || matched; + if (matched && is_binary && binary_mode == BinaryFileMode::Binary) break; } @@ -236,7 +240,6 @@ ErrorOr serenity_main(Main::Arguments args) } }; - bool did_match_something = false; if (!files.size() && !recursive) { char* line = nullptr; size_t line_len = 0;