]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
fix: Handle --hash-file/--checksum-file error properly
authorJoel Rosdahl <joel@rosdahl.net>
Sat, 30 Jul 2022 10:58:12 +0000 (12:58 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Sat, 20 Aug 2022 12:12:56 +0000 (14:12 +0200)
(cherry picked from commit 97076dcfe287413f2c48cf6c3bd03ddb6ee2e420)

src/core/mainoptions.cpp

index 33e73fef1ebeb4874a2d8106841d9ac563c054f3..e9d32328eee0be10acca26f42de71cc370d0d640 100644 (file)
@@ -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;
     }