diff options
author | Joel Rosdahl <joel@rosdahl.net> | 2022-07-30 12:58:12 +0200 |
---|---|---|
committer | Joel Rosdahl <joel@rosdahl.net> | 2022-08-20 14:12:56 +0200 |
commit | 711c418b18a8e2005b7ec015fa7dc0ca253f4112 (patch) | |
tree | 3005c83d10c9ed4fa75b43e31d10866648febcb0 | |
parent | 7242372e734597a006b70ebf3d1c7dca212b4920 (diff) | |
download | ccache-711c418b18a8e2005b7ec015fa7dc0ca253f4112.tar.gz |
fix: Handle --hash-file/--checksum-file error properly
(cherry picked from commit 97076dcfe287413f2c48cf6c3bd03ddb6ee2e420)
-rw-r--r-- | src/core/mainoptions.cpp | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/core/mainoptions.cpp b/src/core/mainoptions.cpp index 33e73fef..e9d32328 100644 --- a/src/core/mainoptions.cpp +++ b/src/core/mainoptions.cpp @@ -415,11 +415,16 @@ process_main_options(int argc, const char* const* argv) case CHECKSUM_FILE: { util::XXH3_128 checksum; Fd fd(arg == "-" ? STDIN_FILENO : open(arg.c_str(), O_RDONLY)); - Util::read_fd(*fd, [&checksum](const void* data, size_t size) { - checksum.update(data, size); - }); - const auto digest = checksum.digest(); - PRINT(stdout, "{}\n", Util::format_base16(digest.bytes(), digest.size())); + if (fd) { + Util::read_fd(*fd, [&checksum](const void* data, size_t size) { + checksum.update(data, size); + }); + const auto digest = checksum.digest(); + PRINT( + stdout, "{}\n", Util::format_base16(digest.bytes(), digest.size())); + } else { + PRINT(stderr, "Error: Failed to checksum {}\n", arg); + } break; } @@ -449,12 +454,14 @@ process_main_options(int argc, const char* const* argv) case HASH_FILE: { Hash hash; - if (arg == "-") { - hash.hash_fd(STDIN_FILENO); + const bool ok = + arg == "-" ? hash.hash_fd(STDIN_FILENO) : hash.hash_file(arg); + if (ok) { + PRINT(stdout, "{}\n", hash.digest().to_string()); } else { - hash.hash_file(arg); + PRINT(stderr, "Error: Failed to hash {}\n", arg); + return EXIT_FAILURE; } - PRINT(stdout, "{}\n", hash.digest().to_string()); break; } |