diff options
| author | Douglas Gregor <dgregor@apple.com> | 2011-09-14 20:27:01 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2011-09-14 20:27:01 +0000 |
| commit | 123dc70c503bf6ddb68b20ee1a47bc4726f975fc (patch) | |
| tree | 61f567f32a30ed4f92faca64f0a2245fd5672e77 | |
| parent | 0c40637012f8ed203c323a539ebd3ff0e0a1626c (diff) | |
| download | llvm-123dc70c503bf6ddb68b20ee1a47bc4726f975fc.zip llvm-123dc70c503bf6ddb68b20ee1a47bc4726f975fc.tar.gz llvm-123dc70c503bf6ddb68b20ee1a47bc4726f975fc.tar.bz2 | |
Add a simple routine to determine the typical system directory for
temporary data.
llvm-svn: 139725
| -rw-r--r-- | llvm/include/llvm/Support/PathV2.h | 10 | ||||
| -rw-r--r-- | llvm/lib/Support/PathV2.cpp | 30 |
2 files changed, 39 insertions, 1 deletions
diff --git a/llvm/include/llvm/Support/PathV2.h b/llvm/include/llvm/Support/PathV2.h index 2515633..8dfbd77 100644 --- a/llvm/include/llvm/Support/PathV2.h +++ b/llvm/include/llvm/Support/PathV2.h @@ -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 != "" diff --git a/llvm/lib/Support/PathV2.cpp b/llvm/lib/Support/PathV2.cpp index c2880ca..4d969fe 100644 --- a/llvm/lib/Support/PathV2.cpp +++ b/llvm/lib/Support/PathV2.cpp @@ -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); |
