diff options
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/plugin/qplugin.h | 19 | ||||
-rw-r--r-- | src/corelib/plugin/qpluginloader.cpp | 4 |
2 files changed, 17 insertions, 6 deletions
diff --git a/src/corelib/plugin/qplugin.h b/src/corelib/plugin/qplugin.h index affe3f5412..884f510541 100644 --- a/src/corelib/plugin/qplugin.h +++ b/src/corelib/plugin/qplugin.h @@ -155,13 +155,26 @@ void Q_CORE_EXPORT qRegisterStaticPluginFunction(QStaticPlugin staticPlugin); // Since Qt 6.3 template <auto (&PluginMetaData)> class QPluginMetaDataV2 { - struct Payload { + struct RegularPayload { QPluginMetaData::MagicHeader header = {}; quint8 payload[sizeof(PluginMetaData)] = {}; - constexpr Payload() { QPluginMetaData::copy(payload, PluginMetaData); } + constexpr RegularPayload() { QPluginMetaData::copy(payload, PluginMetaData); } }; -#define QT_PLUGIN_METADATAV2_SECTION QT_PLUGIN_METADATA_SECTION + struct StaticPayload { + QPluginMetaData::Header header = {}; + quint8 payload[sizeof(PluginMetaData)] = {}; + constexpr StaticPayload() { QPluginMetaData::copy(payload, PluginMetaData); } + }; + +#if defined(QT_STATICPLUGIN) +# define QT_PLUGIN_METADATAV2_SECTION + using Payload = StaticPayload; +#else +# define QT_PLUGIN_METADATAV2_SECTION QT_PLUGIN_METADATA_SECTION + using Payload = RegularPayload; +#endif + Payload payload = {}; public: diff --git a/src/corelib/plugin/qpluginloader.cpp b/src/corelib/plugin/qpluginloader.cpp index e0cd8e7c45..9afdf0e537 100644 --- a/src/corelib/plugin/qpluginloader.cpp +++ b/src/corelib/plugin/qpluginloader.cpp @@ -477,12 +477,10 @@ QList<QStaticPlugin> QPluginLoader::staticPlugins() */ QJsonObject QStaticPlugin::metaData() const { - Q_ASSERT(rawMetaDataSize >= qsizetype(sizeof(QPluginMetaData::MagicHeader))); auto ptr = static_cast<const char *>(rawMetaData); - ptr += sizeof(QPluginMetaData::MagicString); QString errMsg; - QJsonDocument doc = qJsonFromRawLibraryMetaData(ptr, rawMetaDataSize - sizeof(QPluginMetaData::MagicString), &errMsg); + QJsonDocument doc = qJsonFromRawLibraryMetaData(ptr, rawMetaDataSize, &errMsg); Q_ASSERT(doc.isObject()); Q_ASSERT(errMsg.isEmpty()); return doc.object(); |