diff options
| author | Edward Welbourne <edward.welbourne@qt.io> | 2024-04-08 18:28:39 +0200 |
|---|---|---|
| committer | Edward Welbourne <edward.welbourne@qt.io> | 2024-07-15 20:06:38 +0200 |
| commit | 7551482205794442e11b2b7fd1bf48694a5d3ed6 (patch) | |
| tree | 9f1df4078b99b8e32a21bcce76fe8aa4630caaaf | |
| parent | 3ab18f40216fd55e57d8a8128ea1fae7612a45a3 (diff) | |
QAFileEngine: let Private take charge of setting its own q_ptr
The QAFE was always setting the q_ptr of the Private just after it was
constructed, but it wasn't immediately obvious the QAFE(Private &)
constructor wasn't stealing its d_ptr of some other QAFE by
overwriting the q_ptr. Passing the file engine's this to the Private's
constructor makes it all unambiguous and incidentally makes it
possible to make clear that q_ptr is in fact const. Fixes a static
analyzer's grumble about Private's constructor not setting q_ptr.
Task-number: QTBUG-122619
Change-Id: Id532bbe628651ad691b7c4b058e01c5cc2e6e241
Reviewed-by: Ahmad Samir <a.samirh78@gmail.com>
| -rw-r--r-- | src/corelib/io/qabstractfileengine.cpp | 5 | ||||
| -rw-r--r-- | src/corelib/io/qabstractfileengine_p.h | 6 | ||||
| -rw-r--r-- | src/corelib/io/qfsfileengine.cpp | 7 | ||||
| -rw-r--r-- | src/corelib/io/qfsfileengine_p.h | 2 | ||||
| -rw-r--r-- | src/corelib/io/qresource.cpp | 5 |
5 files changed, 14 insertions, 11 deletions
diff --git a/src/corelib/io/qabstractfileengine.cpp b/src/corelib/io/qabstractfileengine.cpp index 70e68be21c1..a3fa9c00f86 100644 --- a/src/corelib/io/qabstractfileengine.cpp +++ b/src/corelib/io/qabstractfileengine.cpp @@ -318,9 +318,8 @@ std::unique_ptr<QAbstractFileEngine> QAbstractFileEngine::create(const QString & \sa setFileName() */ -QAbstractFileEngine::QAbstractFileEngine() : d_ptr(new QAbstractFileEnginePrivate) +QAbstractFileEngine::QAbstractFileEngine() : d_ptr(new QAbstractFileEnginePrivate(this)) { - d_ptr->q_ptr = this; } /*! @@ -330,7 +329,7 @@ QAbstractFileEngine::QAbstractFileEngine() : d_ptr(new QAbstractFileEnginePrivat */ QAbstractFileEngine::QAbstractFileEngine(QAbstractFileEnginePrivate &dd) : d_ptr(&dd) { - d_ptr->q_ptr = this; + Q_ASSERT(d_ptr->q_ptr == this); } /*! diff --git a/src/corelib/io/qabstractfileengine_p.h b/src/corelib/io/qabstractfileengine_p.h index 5e6232af71a..704b0c94c55 100644 --- a/src/corelib/io/qabstractfileengine_p.h +++ b/src/corelib/io/qabstractfileengine_p.h @@ -242,8 +242,8 @@ private: class QAbstractFileEnginePrivate { public: - inline QAbstractFileEnginePrivate() - : fileError(QFile::UnspecifiedError) + inline QAbstractFileEnginePrivate(QAbstractFileEngine *q) + : fileError(QFile::UnspecifiedError), q_ptr(q) { } inline virtual ~QAbstractFileEnginePrivate() { } @@ -251,7 +251,7 @@ public: QFile::FileError fileError; QString errorString; - QAbstractFileEngine *q_ptr; + QAbstractFileEngine *const q_ptr; Q_DECLARE_PUBLIC(QAbstractFileEngine) }; diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp index 2f9087bf6a3..6610b6ecd66 100644 --- a/src/corelib/io/qfsfileengine.cpp +++ b/src/corelib/io/qfsfileengine.cpp @@ -76,7 +76,8 @@ static_assert(sizeof(SignedIOType) == sizeof(UnsignedIOType), */ //**************** QFSFileEnginePrivate -QFSFileEnginePrivate::QFSFileEnginePrivate() : QAbstractFileEnginePrivate() +QFSFileEnginePrivate::QFSFileEnginePrivate(QAbstractFileEngine *q) + : QAbstractFileEnginePrivate(q) { init(); } @@ -108,7 +109,7 @@ void QFSFileEnginePrivate::init() Constructs a QFSFileEngine for the file name \a file. */ QFSFileEngine::QFSFileEngine(const QString &file) - : QAbstractFileEngine(*new QFSFileEnginePrivate) + : QAbstractFileEngine(*new QFSFileEnginePrivate(this)) { Q_D(QFSFileEngine); d->fileEntry = QFileSystemEntry(file); @@ -117,7 +118,7 @@ QFSFileEngine::QFSFileEngine(const QString &file) /*! Constructs a QFSFileEngine. */ -QFSFileEngine::QFSFileEngine() : QAbstractFileEngine(*new QFSFileEnginePrivate) +QFSFileEngine::QFSFileEngine() : QAbstractFileEngine(*new QFSFileEnginePrivate(this)) { } diff --git a/src/corelib/io/qfsfileengine_p.h b/src/corelib/io/qfsfileengine_p.h index 5e77804606a..f6b3a39e647 100644 --- a/src/corelib/io/qfsfileengine_p.h +++ b/src/corelib/io/qfsfileengine_p.h @@ -222,7 +222,7 @@ public: return (openMode & QFile::WriteOnly) && !(openMode & QFile::ExistingOnly); } protected: - QFSFileEnginePrivate(); + QFSFileEnginePrivate(QAbstractFileEngine *q); void init(); diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp index 83df4e1aec1..bd208896861 100644 --- a/src/corelib/io/qresource.cpp +++ b/src/corelib/io/qresource.cpp @@ -1397,6 +1397,9 @@ private: // minimum size for which we'll try to re-open ourselves in mapUncompressed() static constexpr qsizetype RemapCompressedThreshold = 16384; protected: + QResourceFileEnginePrivate(QAbstractFileEngine *q) : + QAbstractFileEnginePrivate(q) {} + ~QResourceFileEnginePrivate() { if (mustUnmap) @@ -1410,7 +1413,7 @@ bool QResourceFileEngine::caseSensitive() const } QResourceFileEngine::QResourceFileEngine(const QString &file) : - QAbstractFileEngine(*new QResourceFileEnginePrivate) + QAbstractFileEngine(*new QResourceFileEnginePrivate(this)) { Q_D(QResourceFileEngine); d->resource.setFileName(file); |
