summaryrefslogtreecommitdiffstats
path: root/util/folder/tempdir.cpp
diff options
context:
space:
mode:
authorDevtools Arcadia <[email protected]>2022-02-07 18:08:42 +0300
committerDevtools Arcadia <[email protected]>2022-02-07 18:08:42 +0300
commit1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch)
treee26c9fed0de5d9873cce7e00bc214573dc2195b7 /util/folder/tempdir.cpp
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'util/folder/tempdir.cpp')
-rw-r--r--util/folder/tempdir.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/util/folder/tempdir.cpp b/util/folder/tempdir.cpp
new file mode 100644
index 00000000000..6fdf8f753c1
--- /dev/null
+++ b/util/folder/tempdir.cpp
@@ -0,0 +1,44 @@
+#include "tempdir.h"
+
+#include "dirut.h"
+
+#include <util/system/fs.h>
+#include <util/system/maxlen.h>
+
+TTempDir::TTempDir()
+ : TTempDir(nullptr, TCreationToken{})
+{
+}
+
+TTempDir::TTempDir(const char* prefix, TCreationToken)
+ : TempDir()
+ , Remove(true)
+{
+ char tempDir[MAX_PATH];
+ if (MakeTempDir(tempDir, prefix) != 0) {
+ ythrow TSystemError() << "Can't create temporary directory";
+ }
+ TempDir = tempDir;
+}
+
+TTempDir::TTempDir(const TString& tempDir)
+ : TempDir(tempDir)
+ , Remove(true)
+{
+ NFs::Remove(TempDir);
+ MakeDirIfNotExist(TempDir.c_str());
+}
+
+TTempDir TTempDir::NewTempDir(const TString& root) {
+ return {root.c_str(), TCreationToken{}};
+}
+
+void TTempDir::DoNotRemove() {
+ Remove = false;
+}
+
+TTempDir::~TTempDir() {
+ if (Remove) {
+ RemoveDirWithContents(TempDir);
+ }
+}