From 777019525ee537aed1a95ea90afd1857568fd811 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 28 May 2025 22:26:46 -0300 Subject: [PATCH] QFileSystemEngine::tempPath: simplify handling of fallbacks If the environment variable is empty, we have a couple of fallbacks, one for Apple Darwin systems and one for everyone else. A non-absolute path in the environment or the Apple API makes no sense, but this code retains this defensive measure for them; for _PATH_TMP from , we assume it is absolute. Change-Id: I3e486f73276a3ae288d1fffdbfe20a74271f73f2 Reviewed-by: Ahmad Samir (cherry picked from commit ae973dc2de5ce3b5a7d18018691479013d91053d) Reviewed-by: Qt Cherry-pick Bot (cherry picked from commit 17f5cdd39ed8a6e9cf25e99003478adfef572485) --- src/corelib/io/qfilesystemengine_unix.cpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp index 40ab67bb34f..5660f3c8adb 100644 --- a/src/corelib/io/qfilesystemengine_unix.cpp +++ b/src/corelib/io/qfilesystemengine_unix.cpp @@ -1826,6 +1826,8 @@ static constexpr QLatin1StringView nativeTempPath() noexcept QLatin1StringView temp = _PATH_TMP ""_L1; static_assert(_PATH_TMP[0] == '/', "_PATH_TMP needs to be absolute"); static_assert(_PATH_TMP[1] != '\0', "Are you really sure _PATH_TMP should be the root dir??"); + if (temp.endsWith(u'/')) + temp.chop(1); return temp; } @@ -1835,17 +1837,12 @@ QString QFileSystemEngine::tempPath() return QT_UNIX_TEMP_PATH_OVERRIDE ""_L1; #else QString temp = qEnvironmentVariable("TMPDIR"); - if (temp.isEmpty()) { - if (false) { -#if defined(Q_OS_DARWIN) && !defined(QT_BOOTSTRAPPED) - } else if (NSString *nsPath = NSTemporaryDirectory()) { - temp = QString::fromCFString((CFStringRef)nsPath); -#endif - } else { - constexpr auto nativeTemp = nativeTempPath(); - temp = nativeTemp; - } - } +# if defined(Q_OS_DARWIN) && !defined(QT_BOOTSTRAPPED) + if (NSString *nsPath; temp.isEmpty() && (nsPath = NSTemporaryDirectory())) + temp = QString::fromCFString((CFStringRef)nsPath); +# endif + if (temp.isEmpty()) + return nativeTempPath(); // the environment variable may also end in '/' if (temp.size() > 1 && temp.endsWith(u'/'))