mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-03 19:32:35 +00:00
Add a convenience createUniqueDirectory function.
There are a few valid situation where we care about the structure inside a directory, but not about the directory itself. A simple example is for unit testing directory traversal. PathV1 had a function like this, add one to V2 and port existing users of the created temp file and delete it hack to using it. llvm-svn: 185059
This commit is contained in:
parent
70bb43a115
commit
7ffacc4992
@ -568,11 +568,16 @@ error_code status_known(const Twine &path, bool &result);
|
||||
/// otherwise a platform specific error_code.
|
||||
error_code unique_file(const Twine &model, int &result_fd,
|
||||
SmallVectorImpl<char> &result_path,
|
||||
bool makeAbsolute = true, unsigned mode = owner_read | owner_write);
|
||||
bool makeAbsolute = true,
|
||||
unsigned mode = owner_read | owner_write);
|
||||
|
||||
/// @brief Simpler version for clients that don't want an open file.
|
||||
error_code unique_file(const Twine &Model, SmallVectorImpl<char> &ResultPath,
|
||||
bool MakeAbsolute = true, unsigned Mode = owner_read | owner_write);
|
||||
bool MakeAbsolute = true,
|
||||
unsigned Mode = owner_read | owner_write);
|
||||
|
||||
error_code createUniqueDirectory(const Twine &Prefix,
|
||||
SmallVectorImpl<char> &ResultPath);
|
||||
|
||||
/// @brief Canonicalize path.
|
||||
///
|
||||
|
@ -642,6 +642,17 @@ error_code unique_file(const Twine &Model, SmallVectorImpl<char> &ResultPath,
|
||||
return fs::remove(P);
|
||||
}
|
||||
|
||||
error_code createUniqueDirectory(const Twine &Prefix,
|
||||
SmallVectorImpl<char> &ResultPath) {
|
||||
// FIXME: This is double inefficient. We compute a unique file name, created
|
||||
// it, delete it and keep only the directory.
|
||||
error_code EC = unique_file(Prefix + "-%%%%%%/dummy", ResultPath);
|
||||
if (EC)
|
||||
return EC;
|
||||
path::remove_filename(ResultPath);
|
||||
return error_code::success();
|
||||
}
|
||||
|
||||
error_code make_absolute(SmallVectorImpl<char> &path) {
|
||||
StringRef p(path.data(), path.size());
|
||||
|
||||
|
@ -30,12 +30,8 @@ TEST(FileOutputBuffer, Test) {
|
||||
// Create unique temporary directory for these tests
|
||||
SmallString<128> TestDirectory;
|
||||
{
|
||||
int fd;
|
||||
ASSERT_NO_ERROR(
|
||||
fs::unique_file("FileOutputBuffer-test-%%-%%-%%-%%/dir", fd,
|
||||
TestDirectory));
|
||||
::close(fd);
|
||||
TestDirectory = path::parent_path(TestDirectory);
|
||||
fs::createUniqueDirectory("FileOutputBuffer-test", TestDirectory));
|
||||
}
|
||||
|
||||
// TEST 1: Verify commit case.
|
||||
|
@ -147,13 +147,9 @@ protected:
|
||||
SmallString<128> TestDirectory;
|
||||
|
||||
virtual void SetUp() {
|
||||
int fd;
|
||||
ASSERT_NO_ERROR(
|
||||
fs::unique_file("file-system-test-%%-%%-%%-%%/test-directory.anchor", fd,
|
||||
TestDirectory));
|
||||
fs::createUniqueDirectory("file-system-test", TestDirectory));
|
||||
// We don't care about this specific file.
|
||||
::close(fd);
|
||||
TestDirectory = path::parent_path(TestDirectory);
|
||||
errs() << "Test Directory: " << TestDirectory << '\n';
|
||||
errs().flush();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user