diff options
author | Edward Welbourne <edward.welbourne@qt.io> | 2024-04-08 17:44:06 +0200 |
---|---|---|
committer | Edward Welbourne <edward.welbourne@qt.io> | 2024-04-24 19:02:09 +0200 |
commit | 2341dc9ad1842e5e835b08e64aa73fe04c072653 (patch) | |
tree | fca37d822e78a4915bdc57890be835f981e68210 | |
parent | 6e8f97b83b7636077a83f2f900a167d049b575f0 (diff) |
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 <a.samirh78@gmail.com>
-rw-r--r-- | src/corelib/io/qabstractfileengine.cpp | 8 | ||||
-rw-r--r-- | 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); |