]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Add Util::get_file_size
authorJoel Rosdahl <joel@rosdahl.net>
Sun, 29 Sep 2019 13:07:24 +0000 (15:07 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Sat, 5 Oct 2019 21:16:46 +0000 (23:16 +0200)
src/Util.cpp
src/Util.hpp
unittest/test_Util.cpp

index e33af701321831bc491926e76687b9cd5ed7f6e7..26dfac1f011bc264e5886e94c7e2e94c73fe863e 100644 (file)
@@ -163,6 +163,18 @@ for_each_level_1_subdir(const std::string& cache_dir,
   progress_receiver(1.0);
 }
 
+bool
+get_file_size(const std::string& path, uint64_t& size)
+{
+  struct stat st;
+  if (stat(path.c_str(), &st) == 0) {
+    size = st.st_size;
+    return true;
+  } else {
+    return false;
+  }
+}
+
 void
 get_level_1_files(const std::string& dir,
                   const ProgressReceiver& progress_receiver,
index 21eca35380a0b6570e1fb5aa7008bb27850f296b..e2bd39574a4343557bf89d418013679f9181d3c4 100644 (file)
@@ -71,6 +71,9 @@ void for_each_level_1_subdir(const std::string& cache_dir,
                              const SubdirVisitor& visitor,
                              const ProgressReceiver& progress_receiver);
 
+// Get file size. Returns true if file exists, otherwise false.
+bool get_file_size(const std::string& path, uint64_t& size);
+
 // Get a list of files in a level 1 subdirectory of the cache.
 //
 // The function works under the assumption that directory entries with one
index a9fcfd205d8596ba3c06188a186681e35d8203e7..b6d2059235d12fac8fd383a7e2c7ef7c82258ab0 100644 (file)
@@ -104,6 +104,16 @@ TEST_CASE("Util::for_each_level_1_subdir")
   CHECK(actual == expected);
 }
 
+TEST_CASE("Util::get_file_size")
+{
+  uint64_t size;
+  CHECK(!Util::get_file_size("does not exist", size));
+
+  Util::write_file("foo", "foo");
+  CHECK(Util::get_file_size("foo", size));
+  CHECK(size == 3);
+}
+
 TEST_CASE("Util::get_level_1_files")
 {
   Util::create_dir("e/m/p/t/y");