mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-15 15:48:38 +00:00
Add a higher level createTemporaryFile function.
This function is inspired by clang's Driver::GetTemporaryPath. It hides the pattern used for uniquing and requires simple file names that are always placed in the system temporary directory. llvm-svn: 185716
This commit is contained in:
parent
97cea9b991
commit
b874aa69e3
@ -575,6 +575,22 @@ error_code unique_file(const Twine &model, int &result_fd,
|
||||
error_code unique_file(const Twine &Model, SmallVectorImpl<char> &ResultPath,
|
||||
bool MakeAbsolute = true);
|
||||
|
||||
/// @brief Create a file in the system temporary directory.
|
||||
///
|
||||
/// The filename is of the form prefix-random_chars.suffix. Since the directory
|
||||
/// is not know to the caller, Prefix and Suffix cannot have path separators.
|
||||
/// The files are created with mode 0600.
|
||||
///
|
||||
/// This should be used for things like a temporary .s that is removed after
|
||||
/// running the assembler.
|
||||
error_code createTemporaryFile(const Twine &Prefix, StringRef Suffix,
|
||||
int &ResultFD,
|
||||
SmallVectorImpl<char> &ResultPath);
|
||||
|
||||
/// @brief Simpler version for clients that don't want an open file.
|
||||
error_code createTemporaryFile(const Twine &Prefix, StringRef Suffix,
|
||||
SmallVectorImpl<char> &ResultPath);
|
||||
|
||||
error_code createUniqueDirectory(const Twine &Prefix,
|
||||
SmallVectorImpl<char> &ResultPath);
|
||||
|
||||
|
@ -654,6 +654,40 @@ error_code unique_file(const Twine &Model, SmallVectorImpl<char> &ResultPath,
|
||||
return createUniqueEntity(Model, Dummy, ResultPath, MakeAbsolute, 0, FS_Name);
|
||||
}
|
||||
|
||||
static error_code createTemporaryFile(const Twine &Model, int &ResultFD,
|
||||
llvm::SmallVectorImpl<char> &ResultPath,
|
||||
FSEntity Type) {
|
||||
SmallString<128> Storage;
|
||||
StringRef P = Model.toNullTerminatedStringRef(Storage);
|
||||
assert(P.find_first_of(separators) == StringRef::npos &&
|
||||
"Model must be a simple filename.");
|
||||
// Use P.begin() so that createUniqueEntity doesn't need to recreate Storage.
|
||||
return createUniqueEntity(P.begin(), ResultFD, ResultPath,
|
||||
true, owner_read | owner_write, Type);
|
||||
}
|
||||
|
||||
static error_code
|
||||
createTemporaryFile(const Twine &Prefix, StringRef Suffix, int &ResultFD,
|
||||
llvm::SmallVectorImpl<char> &ResultPath,
|
||||
FSEntity Type) {
|
||||
return createTemporaryFile(Prefix + "-%%%%%%." + Suffix, ResultFD, ResultPath,
|
||||
Type);
|
||||
}
|
||||
|
||||
|
||||
error_code createTemporaryFile(const Twine &Prefix, StringRef Suffix,
|
||||
int &ResultFD,
|
||||
SmallVectorImpl<char> &ResultPath) {
|
||||
return createTemporaryFile(Prefix, Suffix, ResultFD, ResultPath, FS_File);
|
||||
}
|
||||
|
||||
error_code createTemporaryFile(const Twine &Prefix, StringRef Suffix,
|
||||
SmallVectorImpl<char> &ResultPath) {
|
||||
int Dummy;
|
||||
return createTemporaryFile(Prefix, Suffix, Dummy, ResultPath, FS_Name);
|
||||
}
|
||||
|
||||
|
||||
// This is a mkdtemp with a different pattern. We use createUniqueEntity mostly
|
||||
// for consistency. We should try using mkdtemp.
|
||||
error_code createUniqueDirectory(const Twine &Prefix,
|
||||
|
Loading…
Reference in New Issue
Block a user