[llvm] r216460 - Merge TempDir and system_temp_directory.
Benjamin Kramer
benny.kra at gmail.com
Wed Aug 27 04:58:01 PDT 2014
On Wed, Aug 27, 2014 at 11:35 AM, Timur Iskhodzhanov
<timurrrr at google.com> wrote:
> Hi Rafael,
>
> This change has introduced a warning:
> llvm/lib/Support/Unix/Path.inc:666:7: error: implicit conversion turns
> string literal into bool: 'const char [5]' to 'bool'
> [-Werror,-Wstring-conversion]
>
> Mind taking a look?
> Since the change seems to be just cleanup, I'll just revert it so you
> can take a look offline.
I added an explicit cast to bool, that should help with this warning.
- Ben
>
> --
> Tim
>
> 2014-08-26 18:47 GMT+04:00 Rafael Espindola <rafael.espindola at gmail.com>:
>> Modified: llvm/trunk/lib/Support/Unix/Path.inc
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Path.inc?rev=216460&r1=216459&r2=216460&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Support/Unix/Path.inc (original)
>> +++ llvm/trunk/lib/Support/Unix/Path.inc Tue Aug 26 09:47:52 2014
>> @@ -87,22 +87,6 @@ namespace {
>> };
>> }
>>
>> -static std::error_code TempDir(SmallVectorImpl<char> &result) {
>> - // FIXME: Don't use TMPDIR if program is SUID or SGID enabled.
>> - const char *dir = nullptr;
>> - (dir = std::getenv("TMPDIR")) || (dir = std::getenv("TMP")) ||
>> - (dir = std::getenv("TEMP")) || (dir = std::getenv("TEMPDIR")) ||
>> -#ifdef P_tmpdir
>> - (dir = P_tmpdir) ||
>> -#endif
>> - (dir = "/tmp");
>> -
>> - result.clear();
>> - StringRef d(dir);
>> - result.append(d.begin(), d.end());
>> - return std::error_code();
>> -}
>> -
>> namespace llvm {
>> namespace sys {
>> namespace fs {
>> @@ -665,6 +649,66 @@ bool home_directory(SmallVectorImpl<char
>> return false;
>> }
>>
>> +static const char *getEnvTempDir() {
>> + // Check whether the temporary directory is specified by an environment
>> + // variable.
>> + const char *EnvironmentVariables[] = {"TMPDIR", "TMP", "TEMP", "TEMPDIR"};
>> + for (const char *Env : EnvironmentVariables) {
>> + if (const char *Dir = std::getenv(Env))
>> + return Dir;
>> + }
>> +
>> + return nullptr;
>> +}
>> +
>> +static const char *getDefaultTempDir(bool ErasedOnReboot) {
>> +#ifdef P_tmpdir
>> + if (P_tmpdir)
>> + return P_tmpdir;
>> +#endif
>> +
>> + if (ErasedOnReboot)
>> + return "/tmp";
>> + return "/var/tmp";
>> +}
>> +
>> +void system_temp_directory(bool ErasedOnReboot, SmallVectorImpl<char> &Result) {
>> + Result.clear();
>> +
>> + if (ErasedOnReboot) {
>> + // There is no env variable for the cache directory.
>> + if (const char *RequestedDir = getEnvTempDir()) {
>> + Result.append(RequestedDir, RequestedDir + strlen(RequestedDir));
>> + return;
>> + }
>> + }
>> +
>> +#if defined(_CS_DARWIN_USER_TEMP_DIR) && defined(_CS_DARWIN_USER_CACHE_DIR)
>> + // On Darwin, use DARWIN_USER_TEMP_DIR or DARWIN_USER_CACHE_DIR.
>> + // macros defined in <unistd.h> on darwin >= 9
>> + int ConfName = ErasedOnReboot? _CS_DARWIN_USER_TEMP_DIR
>> + : _CS_DARWIN_USER_CACHE_DIR;
>> + size_t ConfLen = confstr(ConfName, nullptr, 0);
>> + if (ConfLen > 0) {
>> + do {
>> + Result.resize(ConfLen);
>> + ConfLen = confstr(ConfName, Result.data(), Result.size());
>> + } while (ConfLen > 0 && ConfLen != Result.size());
>> +
>> + if (ConfLen > 0) {
>> + assert(Result.back() == 0);
>> + Result.pop_back();
>> + return;
>> + }
>> +
>> + Result.clear();
>> + }
>> +#endif
>> +
>> + const char *RequestedDir = getDefaultTempDir(ErasedOnReboot);
>> + Result.append(RequestedDir, RequestedDir + strlen(RequestedDir));
>> +}
>> +
>> } // end namespace path
>>
>> } // end namespace sys
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list