From 00987db3a97f37439cfc6e70991a08fde424d2b3 Mon Sep 17 00:00:00 2001 From: Jordi Vilalta Prat Date: Fri, 8 Feb 2008 01:02:25 +0000 Subject: Implemented plugin versioning svn-id: r30826 --- backends/plugins/dynamic-plugin.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'backends') diff --git a/backends/plugins/dynamic-plugin.h b/backends/plugins/dynamic-plugin.h index 4b46c31ace..3825f28c87 100644 --- a/backends/plugins/dynamic-plugin.h +++ b/backends/plugins/dynamic-plugin.h @@ -39,6 +39,17 @@ protected: public: virtual bool loadPlugin() { + // Validate the plugin API version + IntFunc verFunc = (IntFunc)findSymbol("PLUGIN_getVersion"); + if (!verFunc) { + unloadPlugin(); + return false; + } + if (verFunc() != PLUGIN_VERSION) { + unloadPlugin(); + return false; + } + // Get the type of the plugin IntFunc typeFunc = (IntFunc)findSymbol("PLUGIN_getType"); if (!typeFunc) { @@ -51,6 +62,17 @@ public: return false; } + // Validate the plugin type API version + IntFunc typeVerFunc = (IntFunc)findSymbol("PLUGIN_getTypeVersion"); + if (!typeVerFunc) { + unloadPlugin(); + return false; + } + if (typeVerFunc() != pluginTypeVersions[_type]) { + unloadPlugin(); + return false; + } + // Get the plugin's instantiator object GetObjectFunc getObject = (GetObjectFunc)findSymbol("PLUGIN_getObject"); if (!getObject) { -- cgit v1.2.3