Respect the TMPDIR environment variable on Unix

On Mac, this is important as TMPDIR points to a user-specific temp dir
which avoids a potential problem where an app bundle created in the temp dir
running as User A cannot later be replaced by a copy of the updater running
as User B.

MD-19088 #time 30m
Reviewed-by: Nicolas Esteves
This commit is contained in:
Robert Knight 2012-11-26 12:05:20 +00:00
parent 16baf00ee6
commit b60a7a7ba2
3 changed files with 14 additions and 1 deletions

View file

@ -450,7 +450,12 @@ std::string FileUtils::toUnixPathSeparators(const std::string& str)
std::string FileUtils::tempPath() std::string FileUtils::tempPath()
{ {
#ifdef PLATFORM_UNIX #ifdef PLATFORM_UNIX
return "/tmp"; std::string tmpDir(notNullString(getenv("TMPDIR")));
if (tmpDir.empty())
{
tmpDir = "/tmp";
}
return tmpDir;
#else #else
char buffer[MAX_PATH+1]; char buffer[MAX_PATH+1];
GetTempPath(MAX_PATH+1,buffer); GetTempPath(MAX_PATH+1,buffer);

View file

@ -33,11 +33,18 @@ void TestFileUtils::testSymlinkFileExists()
#endif #endif
} }
void TestFileUtils::testStandardDirs()
{
std::string tmpDir = FileUtils::tempPath();
TEST_COMPARE(FileUtils::fileExists(tmpDir.data()), true);
}
int main(int,char**) int main(int,char**)
{ {
TestList<TestFileUtils> tests; TestList<TestFileUtils> tests;
tests.addTest(&TestFileUtils::testDirName); tests.addTest(&TestFileUtils::testDirName);
tests.addTest(&TestFileUtils::testIsRelative); tests.addTest(&TestFileUtils::testIsRelative);
tests.addTest(&TestFileUtils::testSymlinkFileExists); tests.addTest(&TestFileUtils::testSymlinkFileExists);
tests.addTest(&TestFileUtils::testStandardDirs);
return TestUtils::runTest(tests); return TestUtils::runTest(tests);
} }

View file

@ -6,4 +6,5 @@ class TestFileUtils
void testDirName(); void testDirName();
void testIsRelative(); void testIsRelative();
void testSymlinkFileExists(); void testSymlinkFileExists();
void testStandardDirs();
}; };