]> 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>
Mon, 1 Aug 2022 12:53:58 +0000 (14:53 +0200)
src/core/mainoptions.cpp

index 83ad50803e39ff637dd72a018a30b728523162ce..456a1b0673ecf238438461cb6e0ad1d2d2132e94 100644 (file)
@@ -416,11 +416,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;
     }
 
@@ -450,12 +455,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;
     }