summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-06-27 03:45:31 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-06-27 03:45:31 +0000
commit7ffacc4992129a8a8f2c6986c6bdc92802da91f9 (patch)
tree7f4e5676140f4c2ee0ab3ae24b20ab26f3668037 /llvm
parent70bb43a11579615ec3707f293018efc94841d552 (diff)
downloadbcm5719-llvm-7ffacc4992129a8a8f2c6986c6bdc92802da91f9.tar.gz
bcm5719-llvm-7ffacc4992129a8a8f2c6986c6bdc92802da91f9.zip
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
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/Support/FileSystem.h9
-rw-r--r--llvm/lib/Support/Path.cpp11
-rw-r--r--llvm/unittests/Support/FileOutputBufferTest.cpp6
-rw-r--r--llvm/unittests/Support/Path.cpp6
4 files changed, 20 insertions, 12 deletions
diff --git a/llvm/include/llvm/Support/FileSystem.h b/llvm/include/llvm/Support/FileSystem.h
index b72192753c7..ac46117f274 100644
--- a/llvm/include/llvm/Support/FileSystem.h
+++ b/llvm/include/llvm/Support/FileSystem.h
@@ -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.
///
diff --git a/llvm/lib/Support/Path.cpp b/llvm/lib/Support/Path.cpp
index 8b9e60a2d9e..a631c760fd7 100644
--- a/llvm/lib/Support/Path.cpp
+++ b/llvm/lib/Support/Path.cpp
@@ -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());
diff --git a/llvm/unittests/Support/FileOutputBufferTest.cpp b/llvm/unittests/Support/FileOutputBufferTest.cpp
index c7ca1ab6a61..5e873193f28 100644
--- a/llvm/unittests/Support/FileOutputBufferTest.cpp
+++ b/llvm/unittests/Support/FileOutputBufferTest.cpp
@@ -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.
diff --git a/llvm/unittests/Support/Path.cpp b/llvm/unittests/Support/Path.cpp
index d5591ea1bdc..ce335ccc6b1 100644
--- a/llvm/unittests/Support/Path.cpp
+++ b/llvm/unittests/Support/Path.cpp
@@ -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();
}
OpenPOWER on IntegriCloud