From 2341dc9ad1842e5e835b08e64aa73fe04c072653 Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Mon, 8 Apr 2024 17:44:06 +0200 Subject: [PATCH] QAbstractFileEngine member classes: sort out construction QAbstractFileEngine::(Un)?MapExtension(Option|Return) didn't initialize their members in their default constructors. The two Option types were each insantiated in one place that set each field, so give them overt constructors taking the field values. For the Return type, apply NSDMI to its one data member. The code using it does ignore the data member unless extension() succeeds, but a derived class that wronlgy neglects to set it while succeeding would have caused trouble. Disable copy and move for all three, overtly declare the default constructor for the Result. Task-number: QTBUG-122619 Change-Id: I4b30d383c59e52735d54d9f709c532d504bdea60 Reviewed-by: Ahmad Samir --- src/corelib/io/qabstractfileengine.cpp | 8 ++------ src/corelib/io/qabstractfileengine_p.h | 11 +++++++++-- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/corelib/io/qabstractfileengine.cpp b/src/corelib/io/qabstractfileengine.cpp index c9f218ddf5..ea5ce13b5e 100644 --- a/src/corelib/io/qabstractfileengine.cpp +++ b/src/corelib/io/qabstractfileengine.cpp @@ -779,10 +779,7 @@ bool QAbstractFileEngine::atEnd() const uchar *QAbstractFileEngine::map(qint64 offset, qint64 size, QFile::MemoryMapFlags flags) { - MapExtensionOption option; - option.offset = offset; - option.size = size; - option.flags = flags; + const MapExtensionOption option(offset, size, flags); MapExtensionReturn r; if (!extension(MapExtension, &option, &r)) return nullptr; @@ -803,8 +800,7 @@ uchar *QAbstractFileEngine::map(qint64 offset, qint64 size, QFile::MemoryMapFlag */ bool QAbstractFileEngine::unmap(uchar *address) { - UnMapExtensionOption options; - options.address = address; + const UnMapExtensionOption options(address); return extension(UnMapExtension, &options); } diff --git a/src/corelib/io/qabstractfileengine_p.h b/src/corelib/io/qabstractfileengine_p.h index 903ee1276c..b2e0b248da 100644 --- a/src/corelib/io/qabstractfileengine_p.h +++ b/src/corelib/io/qabstractfileengine_p.h @@ -147,19 +147,26 @@ public: {}; class MapExtensionOption : public ExtensionOption { + Q_DISABLE_COPY_MOVE(MapExtensionOption) public: qint64 offset; qint64 size; QFile::MemoryMapFlags flags; + constexpr MapExtensionOption(qint64 off, qint64 sz, QFile::MemoryMapFlags f) + : offset(off), size(sz), flags(f) {} }; class MapExtensionReturn : public ExtensionReturn { + Q_DISABLE_COPY_MOVE(MapExtensionReturn) public: - uchar *address; + MapExtensionReturn() = default; + uchar *address = nullptr; }; class UnMapExtensionOption : public ExtensionOption { + Q_DISABLE_COPY_MOVE(UnMapExtensionOption) public: - uchar *address; + uchar *address = nullptr; + constexpr UnMapExtensionOption(uchar *p) : address(p) {} }; virtual bool extension(Extension extension, const ExtensionOption *option = nullptr, ExtensionReturn *output = nullptr);