Only loaded matching plugin on Windows #4866

Conflicts:
	src/gui/gui.pro
	src/gui/src/PluginManager.cpp
	src/lib/arch/win32/ArchPluginWindows.cpp
This commit is contained in:
Jerry (Xinyu Hou)
2015-07-15 17:34:31 -07:00
parent 02902066a4
commit a249c38b96
6 changed files with 85 additions and 10 deletions

View File

@@ -18,6 +18,7 @@
#include "arch/win32/ArchPluginWindows.h"
#include "arch/win32/XArchWindows.h"
#include "common/PluginVersion.h"
#include "base/Log.h"
#include "base/IEventQueue.h"
#include "base/Event.h"
@@ -67,15 +68,23 @@ ArchPluginWindows::load()
}
void* lib = reinterpret_cast<void*>(library);
String filename = synergy::string::removeFileExt(*it);
m_pluginTable.insert(std::make_pair(filename, lib));
const char* version = (char*)invoke(filename.c_str(), "version",NULL);
if (version == NULL) {
version = kPre174Plugin;
String pluginName = synergy::string::removeFileExt(*it);
m_pluginTable.insert(std::make_pair(pluginName, lib));
char* version = (char*)invoke(pluginName.c_str(), "version", NULL);
String expectedVersion(pluginVersion(pluginName.c_str()));
if (version != NULL && expectedVersion.compare(version) == 0) {
LOG((CLOG_DEBUG "loaded plugin: %s (%s)", (*it).c_str(), version));
}
else {
LOG((CLOG_WARN "plugin version doesn't match"));
LOG((CLOG_DEBUG "expected plugin version: %s actual plugin version: %s",
expectedVersion.c_str(), version));
LOG((CLOG_WARN "skip plugin: %s", (*it).c_str()));
m_pluginTable.erase(pluginName);
FreeLibrary(library);
}
LOG((CLOG_DEBUG "loaded plugin: %s (%s)", (*it).c_str(),version));
}
}