summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-07-05 21:01:08 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-07-05 21:01:08 +0000
commitc9d2e5b8ca06bdb9af8338ec7dde5eafad40d9f0 (patch)
treea5d007b8b2b1a7b425b799c0ec49a1f3c60e2456 /llvm/lib
parent10357900342fe7509f28f95edf3e01119227d311 (diff)
downloadbcm5719-llvm-c9d2e5b8ca06bdb9af8338ec7dde5eafad40d9f0.tar.gz
bcm5719-llvm-c9d2e5b8ca06bdb9af8338ec7dde5eafad40d9f0.zip
Add a createUniqueFile function and switch llvm's users of unique_file.
This function is complementary to createTemporaryFile. It handles the case were the unique file is *not* temporary: we will rename it in the end. Since we will rename it, the file has to be in the same filesystem as the final destination and we don't prepend the system temporary directory. This has a small semantic difference from unique_file: the default mode is 0666. This matches the behavior of most unix tools. For example, with this change lld now produces files with the same permissions as ld. I will add a test of this change when I port clang over to createUniqueFile (next commit). llvm-svn: 185726
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Support/FileOutputBuffer.cpp4
-rw-r--r--llvm/lib/Support/LockFileManager.cpp7
-rw-r--r--llvm/lib/Support/Path.cpp11
3 files changed, 16 insertions, 6 deletions
diff --git a/llvm/lib/Support/FileOutputBuffer.cpp b/llvm/lib/Support/FileOutputBuffer.cpp
index 1ee69b60234..fbfda317e75 100644
--- a/llvm/lib/Support/FileOutputBuffer.cpp
+++ b/llvm/lib/Support/FileOutputBuffer.cpp
@@ -65,8 +65,8 @@ error_code FileOutputBuffer::create(StringRef FilePath,
// Create new file in same directory but with random name.
SmallString<128> TempFilePath;
int FD;
- EC = sys::fs::unique_file(Twine(FilePath) + ".tmp%%%%%%%",
- FD, TempFilePath, false, 0644);
+ EC = sys::fs::createUniqueFile(Twine(FilePath) + ".tmp%%%%%%%",
+ FD, TempFilePath);
if (EC)
return EC;
diff --git a/llvm/lib/Support/LockFileManager.cpp b/llvm/lib/Support/LockFileManager.cpp
index 2917e273bce..21c4d4070d2 100644
--- a/llvm/lib/Support/LockFileManager.cpp
+++ b/llvm/lib/Support/LockFileManager.cpp
@@ -78,10 +78,9 @@ LockFileManager::LockFileManager(StringRef FileName)
UniqueLockFileName += "-%%%%%%%%";
int UniqueLockFileID;
if (error_code EC
- = sys::fs::unique_file(UniqueLockFileName.str(),
- UniqueLockFileID,
- UniqueLockFileName,
- /*makeAbsolute=*/false)) {
+ = sys::fs::createUniqueFile(UniqueLockFileName.str(),
+ UniqueLockFileID,
+ UniqueLockFileName)) {
Error = EC;
return;
}
diff --git a/llvm/lib/Support/Path.cpp b/llvm/lib/Support/Path.cpp
index 36fb9f3a4bf..58c7c96c662 100644
--- a/llvm/lib/Support/Path.cpp
+++ b/llvm/lib/Support/Path.cpp
@@ -654,6 +654,17 @@ error_code unique_file(const Twine &Model, SmallVectorImpl<char> &ResultPath,
return createUniqueEntity(Model, Dummy, ResultPath, MakeAbsolute, 0, FS_Name);
}
+error_code createUniqueFile(const Twine &Model, int &ResultFd,
+ SmallVectorImpl<char> &ResultPath, unsigned Mode) {
+ return createUniqueEntity(Model, ResultFd, ResultPath, false, Mode, FS_File);
+}
+
+error_code createUniqueFile(const Twine &Model,
+ SmallVectorImpl<char> &ResultPath) {
+ int Dummy;
+ return createUniqueEntity(Model, Dummy, ResultPath, false, 0, FS_Name);
+}
+
static error_code createTemporaryFile(const Twine &Model, int &ResultFD,
llvm::SmallVectorImpl<char> &ResultPath,
FSEntity Type) {
OpenPOWER on IntegriCloud