summaryrefslogtreecommitdiffhomepage
path: root/libcommon
diff options
context:
space:
mode:
Diffstat (limited to 'libcommon')
-rw-r--r--libcommon/tempfile.cpp14
-rw-r--r--libcommon/tempfile.h3
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();
};