backport upstream commit 7c54988b1b3b9eb4d2f3650c1ba5ffe97673ca92ci/unstable
parent
1f2103c875
commit
0640e8a754
@ -1,21 +0,0 @@
|
||||
Author: Pino Toscano <toscano.pino@tiscali.it>
|
||||
Description: Avoid unconditional PATH_MAX usage
|
||||
Use a "safe" size in case PATH_MAX is not defined; in the end, this should not
|
||||
be used, as a allocating realpath() will be used instead.
|
||||
Forwarded: no
|
||||
Last-Update: 2020-04-19
|
||||
|
||||
--- a/src/corelib/io/qfilesystemengine_unix.cpp
|
||||
+++ b/src/corelib/io/qfilesystemengine_unix.cpp
|
||||
@@ -689,7 +689,11 @@ QFileSystemEntry QFileSystemEngine::cano
|
||||
Q_UNUSED(data);
|
||||
return QFileSystemEntry(slowCanonicalized(absoluteName(entry).filePath()));
|
||||
#else
|
||||
+#ifdef PATH_MAX
|
||||
char stack_result[PATH_MAX+1];
|
||||
+#else
|
||||
+ char stack_result[4096+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
|
@ -0,0 +1,47 @@
|
||||
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
|
||||
|
Loading…
Reference in new issue