From c279fd10970acf374eb939c2e4e15241eecd7f13 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Wed, 12 Oct 2022 14:46:15 +0100 Subject: [PATCH] cksum: Manually count file size instead of using stat() `stat()` doesn't work for stdin, but this does. --- Userland/Utilities/cksum.cpp | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/Userland/Utilities/cksum.cpp b/Userland/Utilities/cksum.cpp index 62f2c5c71f..31a57e3d50 100644 --- a/Userland/Utilities/cksum.cpp +++ b/Userland/Utilities/cksum.cpp @@ -54,14 +54,7 @@ ErrorOr serenity_main(Main::Arguments arguments) continue; } auto file = file_or_error.release_value(); - - auto stat_or_error = Core::System::stat(filepath); - if (stat_or_error.is_error()) { - warnln("{}: Failed to fstat {}: {}", arguments.strings[0], filepath, stat_or_error.error()); - fail = true; - continue; - } - auto st = stat_or_error.release_value(); + size_t file_size = 0; if (algorithm == "crc32") { Crypto::Checksum::CRC32 crc32; @@ -72,9 +65,10 @@ ErrorOr serenity_main(Main::Arguments arguments) fail = true; continue; } + file_size += data_or_error.value().size(); crc32.update(data_or_error.value()); } - outln("{:08x} {} {}", crc32.digest(), st.st_size, path); + outln("{:08x} {} {}", crc32.digest(), file_size, path); } else if (algorithm == "adler32") { Crypto::Checksum::Adler32 adler32; while (!file->is_eof()) { @@ -84,9 +78,10 @@ ErrorOr serenity_main(Main::Arguments arguments) fail = true; continue; } + file_size += data_or_error.value().size(); adler32.update(data_or_error.value()); } - outln("{:08x} {} {}", adler32.digest(), st.st_size, path); + outln("{:08x} {} {}", adler32.digest(), file_size, path); } else { warnln("{}: Unknown checksum algorithm: {}", arguments.strings[0], algorithm); exit(1);