summaryrefslogtreecommitdiffstats
path: root/src/corelib/plugin
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2012-07-09 13:46:48 +0200
committerQt by Nokia <qt-info@nokia.com>2012-07-12 03:34:13 +0200
commit0aa4fa455e020587940cc18e65c8725b67411615 (patch)
tree40b5fcefbfed9c1f5fd7452de27d8e3118e2ae41 /src/corelib/plugin
parent282d81e4e53c41f2b89a41c01e149ef484460df7 (diff)
Fix static plugin loading.
The QFactoryLoader::indexOf and keyMap functions expect to receive the metadata that contains a "MetaData" entry, instead of the entry itself. Also, QFactoryLoader::metaData() skips static plugins with the wrong IID, so we need to skip it too in QFactoryLoader::instance(). Change-Id: I8a453087feb88d0e8d1021054353f3600d5100a5 Reviewed-by: Mark Brand <mabrand@mabrand.nl>
Diffstat (limited to 'src/corelib/plugin')
-rw-r--r--src/corelib/plugin/qfactoryloader.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp
index 0b7b389264..98b087e414 100644
--- a/src/corelib/plugin/qfactoryloader.cpp
+++ b/src/corelib/plugin/qfactoryloader.cpp
@@ -217,8 +217,7 @@ QList<QJsonObject> QFactoryLoader::metaData() const
if (object.value(QLatin1String("IID")) != QLatin1String(d->iid.constData(), d->iid.size()))
continue;
- QJsonObject meta = object.value(QLatin1String("MetaData")).toObject();
- metaData.append(meta);
+ metaData.append(object);
}
return metaData;
}
@@ -246,8 +245,16 @@ QObject *QFactoryLoader::instance(int index) const
index -= d->libraryList.size();
QVector<QStaticPlugin> staticPlugins = QLibraryPrivate::staticPlugins();
- if (index < staticPlugins.size())
- return staticPlugins.at(index).instance();
+ for (int i = 0; i < staticPlugins.count(); ++i) {
+ const char *rawMetaData = staticPlugins.at(i).metaData();
+ QJsonObject object = QLibraryPrivate::fromRawMetaData(rawMetaData).object();
+ if (object.value(QLatin1String("IID")) != QLatin1String(d->iid.constData(), d->iid.size()))
+ continue;
+
+ if (index == 0)
+ return staticPlugins.at(i).instance();
+ --index;
+ }
return 0;
}