You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.2 KiB
41 lines
1.2 KiB
#include "./common/temp_dir.h"
|
|
|
|
#include <cstdlib>
|
|
#include <filesystem> // NOLINT
|
|
#include <system_error> // NOLINT
|
|
|
|
#include "absl/log/check.h"
|
|
#include "absl/strings/str_cat.h"
|
|
#include "absl/strings/string_view.h"
|
|
|
|
namespace fuzztest::internal {
|
|
|
|
namespace fs = std::filesystem;
|
|
|
|
TempDir::TempDir(absl::string_view custom_prefix) {
|
|
fs::path temp_root;
|
|
temp_root = absl::NullSafeStringView(getenv("TEST_TMPDIR"));
|
|
if (temp_root.empty()) {
|
|
std::error_code error;
|
|
temp_root = std::filesystem::temp_directory_path(error);
|
|
CHECK(!error) << "Failed to get the root temp directory path: "
|
|
<< error.message();
|
|
}
|
|
absl::string_view prefix = custom_prefix.empty() ? "temp_dir" : custom_prefix;
|
|
const fs::path path_template = temp_root / absl::StrCat(prefix, "_XXXXXX");
|
|
#if !defined(_MSC_VER)
|
|
path_ = mkdtemp(path_template.string().data());
|
|
#else
|
|
CHECK(false) << "Windows is not supported yet.";
|
|
#endif
|
|
CHECK(std::filesystem::is_directory(path_));
|
|
}
|
|
|
|
TempDir::~TempDir() {
|
|
std::error_code error;
|
|
std::filesystem::remove_all(path_, error);
|
|
CHECK(!error) << "Unable to clean up temporary dir " << path_ << ": "
|
|
<< error.message();
|
|
}
|
|
|
|
} // namespace fuzztest::internal
|
|
|