Add a simple routine to determine the typical system directory for

temporary data. 


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139725 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Douglas Gregor 2011-09-14 20:27:01 +00:00
parent bf841cf336
commit 55cf815e19
2 changed files with 39 additions and 1 deletions

View File

@ -187,7 +187,7 @@ const StringRef root_name(StringRef path);
/// @result The root directory of \a path if it has one, otherwise
/// "".
const StringRef root_directory(StringRef path);
/// @brief Get root path.
///
/// Equivalent to root_name + root_directory.
@ -264,6 +264,14 @@ const StringRef extension(StringRef path);
/// @result true if \a value is a path separator character on the host OS
bool is_separator(char value);
/// @brief Get the typical temporary directory for the system, e.g.,
/// "/var/tmp" or "C:/TEMP"
///
/// @param erasedOnReboot Whether to favor a path that is erased on reboot
/// rather than one that potentially persists longer.
/// @param Result Holds the resulting path name.
void system_temp_directory(bool erasedOnReboot, SmallVectorImpl<char> &result);
/// @brief Has root name?
///
/// root_name != ""

View File

@ -490,6 +490,36 @@ bool is_separator(char value) {
}
}
void system_temp_directory(bool erasedOnReboot, SmallVectorImpl<char> &result) {
result.clear();
// Check whether the temporary directory is specified by an environment
// variable.
const char *EnvironmentVariable;
#ifdef LLVM_ON_WIN32
EnvironmentVariable = "TEMP";
#else
EnvironmentVariable = "TMPDIR";
#endif
if (char *RequestedDir = getenv(EnvironmentVariable)) {
result.append(RequestedDir, RequestedDir + strlen(RequestedDir));
return;
}
// Fall back to a system default.
const char *DefaultResult;
#ifdef LLVM_ON_WIN32
(void)erasedOnReboot;
DefaultResult = "C:\TEMP";
#else
if (erasedOnReboot)
DefaultResult = "/tmp";
else
DefaultResult = "/var/tmp";
#endif
result.append(DefaultResult, DefaultResult + strlen(DefaultResult));
}
bool has_root_name(const Twine &path) {
SmallString<128> path_storage;
StringRef p = path.toStringRef(path_storage);