-// Copyright (C) 2021-2022 Joel Rosdahl and other contributors
+// Copyright (C) 2021-2023 Joel Rosdahl and other contributors
//
// See doc/AUTHORS.adoc for a complete list of contributors.
//
void create_cachedir_tag(const std::string& dir);
+// Return how much a file of `size` bytes likely would take on disk.
+uint64_t likely_size_on_disk(uint64_t size);
+
// Read data from `fd` until end of file and call `data_receiver` with the read
// data. Returns an error if the underlying read(2) call returned -1.
nonstd::expected<void, std::string> read_fd(int fd, DataReceiver data_receiver);
nonstd::span<const uint8_t> data,
InPlace in_place = InPlace::no);
+// --- Inline implementations ---
+
+inline uint64_t
+likely_size_on_disk(uint64_t size)
+{
+ return (size + 4095) & ~4095;
+}
+
} // namespace util
-// Copyright (C) 2022 Joel Rosdahl and other contributors
+// Copyright (C) 2022-2023 Joel Rosdahl and other contributors
//
// See doc/AUTHORS.adoc for a complete list of contributors.
//
using TestUtil::TestContext;
+TEST_CASE("util::likely_size_on_disk")
+{
+ CHECK(util::likely_size_on_disk(0) == 0);
+ CHECK(util::likely_size_on_disk(1) == 4096);
+ CHECK(util::likely_size_on_disk(4095) == 4096);
+ CHECK(util::likely_size_on_disk(4096) == 4096);
+ CHECK(util::likely_size_on_disk(4097) == 8192);
+}
+
TEST_CASE("util::read_file and util::write_file, text data")
{
TestContext test_context;