diff options
Diffstat (limited to 'libcommon')
-rw-r--r-- | libcommon/tempfile.cpp | 14 | ||||
-rw-r--r-- | libcommon/tempfile.h | 3 |
2 files changed, 12 insertions, 5 deletions
diff --git a/libcommon/tempfile.cpp b/libcommon/tempfile.cpp index c30bb57..f425db2 100644 --- a/libcommon/tempfile.cpp +++ b/libcommon/tempfile.cpp @@ -14,10 +14,15 @@ fs::path Tempfile::GetPath() const return m_path; } -Tempfile::Tempfile() { +Tempfile::Tempfile(const std::filesystem::path& extension) +{ try { - char name[] = "/tmp/tempfileXXXXXX.zip"; - int fd = mkstemps(name, 4); + fs::path path { fs::temp_directory_path() / "tempfileXXXXXX"}; + if (!extension.empty()) + path += extension; + + fs::path::string_type name{path.native()}; + int fd = mkstemps(name.data(), extension.native().size()); if (fd == -1) std::runtime_error("mkstemps: "s + strerror(errno)); close(fd); @@ -27,7 +32,8 @@ Tempfile::Tempfile() { } } -Tempfile::~Tempfile() { +Tempfile::~Tempfile() +{ try { fs::remove_all(m_path); } catch (const std::exception& ex) { diff --git a/libcommon/tempfile.h b/libcommon/tempfile.h index 5938fb9..b9839a7 100644 --- a/libcommon/tempfile.h +++ b/libcommon/tempfile.h @@ -9,7 +9,8 @@ class Tempfile public: std::filesystem::path GetPath() const; - Tempfile(); + // extension: e.g. ".zip" + Tempfile(const std::filesystem::path& extension = std::filesystem::path{}); ~Tempfile(); }; |