You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
2.1 KiB
48 lines
2.1 KiB
From 7c54988b1b3b9eb4d2f3650c1ba5ffe97673ca92 Mon Sep 17 00:00:00 2001
|
|
From: Pino Toscano <toscano.pino@tiscali.it>
|
|
Date: Thu, 10 Feb 2022 08:26:11 +0100
|
|
Subject: [PATCH] Avoid a stack buffer when not needed
|
|
|
|
Allocate a PATH_MAX-sized buffer on stack only in case we are not using
|
|
realpath(X, null), i.e. on platforms with older POSIX versions, macOS,
|
|
or Android.
|
|
|
|
This fixes the build on platforms that do not have PATH_MAX (e.g.
|
|
GNU/Hurd), and it provides a minor optimization on realpath(X, null)
|
|
platforms.
|
|
|
|
Change-Id: Icd92a1b15ec18c5eef8113408e9610dfac774101
|
|
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
|
|
---
|
|
src/corelib/io/qfilesystemengine_unix.cpp | 4 ++++
|
|
1 file changed, 4 insertions(+)
|
|
|
|
diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp
|
|
index 6e8229daec..fb66d47d38 100644
|
|
--- a/src/corelib/io/qfilesystemengine_unix.cpp
|
|
+++ b/src/corelib/io/qfilesystemengine_unix.cpp
|
|
@@ -686,7 +686,9 @@ QFileSystemEntry QFileSystemEngine::canonicalName(const QFileSystemEntry &entry,
|
|
Q_UNUSED(data);
|
|
return QFileSystemEntry(slowCanonicalized(absoluteName(entry).filePath()));
|
|
#else
|
|
+# if defined(Q_OS_DARWIN) || defined(Q_OS_ANDROID) || _POSIX_VERSION < 200801L
|
|
char stack_result[PATH_MAX+1];
|
|
+# endif
|
|
char *resolved_name = nullptr;
|
|
# if defined(Q_OS_DARWIN) || defined(Q_OS_ANDROID)
|
|
// On some Android and macOS versions, realpath() will return a path even if
|
|
@@ -714,8 +716,10 @@ QFileSystemEntry QFileSystemEngine::canonicalName(const QFileSystemEntry &entry,
|
|
data.knownFlagsMask |= QFileSystemMetaData::ExistsAttribute;
|
|
data.entryFlags |= QFileSystemMetaData::ExistsAttribute;
|
|
QString canonicalPath = QDir::cleanPath(QFile::decodeName(resolved_name));
|
|
+# if defined(Q_OS_DARWIN) || defined(Q_OS_ANDROID) || _POSIX_VERSION < 200801L
|
|
if (resolved_name != stack_result)
|
|
free(resolved_name);
|
|
+# endif
|
|
return QFileSystemEntry(canonicalPath);
|
|
} else if (errno == ENOENT || errno == ENOTDIR) { // file doesn't exist
|
|
data.knownFlagsMask |= QFileSystemMetaData::ExistsAttribute;
|
|
--
|
|
2.34.1
|
|
|