7#include <packager/file/file_util.h>
23#include <absl/strings/str_format.h>
28std::string TempFileName() {
30 const uint32_t process_id =
static_cast<uint32_t
>(GetCurrentProcessId());
32 const uint32_t process_id =
static_cast<uint32_t
>(getpid());
34 const size_t thread_id =
35 std::hash<std::thread::id>{}(std::this_thread::get_id());
40 static thread_local uint32_t instance_id = 0;
43 return absl::StrFormat(
"packager-tempfile-%x-%zx-%x", process_id, thread_id,
48bool TempFilePath(
const std::string& temp_dir, std::string* temp_file_path) {
49 std::filesystem::path temp_dir_path;
51 if (temp_dir.empty()) {
52 temp_dir_path = std::filesystem::temp_directory_path();
54 temp_dir_path = std::filesystem::u8path(temp_dir);
57 *temp_file_path = (temp_dir_path / TempFileName()).
string();
61std::string MakePathRelative(
const std::filesystem::path& media_path,
62 const std::filesystem::path& parent_path) {
63 auto relative_path = std::filesystem::relative(media_path, parent_path);
64 if (relative_path.empty() || *relative_path.begin() ==
"..") {
66 relative_path = media_path;
69 return relative_path.lexically_normal().generic_string();
All the methods that are virtual are virtual for mocking.
bool TempFilePath(const std::string &temp_dir, std::string *temp_file_path)