diff --git a/engines/ags/engine/util/library.h b/engines/ags/engine/util/library.h index 5dcd2b10677..e36147e217c 100644 --- a/engines/ags/engine/util/library.h +++ b/engines/ags/engine/util/library.h @@ -29,17 +29,25 @@ namespace AGS3 { namespace AGS { namespace Engine { +using AGS::Shared::String; + class BaseLibrary { public: BaseLibrary() {} virtual ~BaseLibrary() {} - virtual AGS::Shared::String GetFilenameForLib(const AGS::Shared::String &libraryName) = 0; + String GetName() const { return _name; } + String GetFilePath() const { return _path; } - virtual bool Load(const AGS::Shared::String &libraryName) = 0; + virtual String GetFilenameForLib(const String &libname) = 0; + virtual bool Load(const String &libname) = 0; + virtual void Unload() = 0; + virtual bool IsLoaded() const = 0; - virtual bool Unload() = 0; +protected: + String _name; + String _path; }; } // namespace Engine diff --git a/engines/ags/engine/util/library_scummvm.h b/engines/ags/engine/util/library_scummvm.h index e74632496bf..7c0f37665df 100644 --- a/engines/ags/engine/util/library_scummvm.h +++ b/engines/ags/engine/util/library_scummvm.h @@ -55,20 +55,26 @@ public: if (error) AGS::Shared::Debug::Printf("pluginOpen returned: %s", error); - return (_library != nullptr); + if (_library == nullptr) + return false; + _name = libraryName; + _path = GetFilenameForLib(libraryName);; + return true; } - bool Unload() override { + void Unload() override { if (_library) { - Plugins::PluginBase *lib = _library; + Plugins::pluginClose(_library); _library = nullptr; - - return (Plugins::pluginClose(lib) == 0); - } else { - return true; + _name = ""; + _path = ""; } } + bool IsLoaded() const override { + return _library != nullptr; + } + Plugins::PluginBase *getPlugin() const { return _library; } diff --git a/engines/ags/plugins/ags_plugin.cpp b/engines/ags/plugins/ags_plugin.cpp index 1230daa470d..eb7d5b06327 100644 --- a/engines/ags/plugins/ags_plugin.cpp +++ b/engines/ags/plugins/ags_plugin.cpp @@ -858,12 +858,11 @@ Engine::GameInitError pl_register_plugins(const std::vector apl->filename = "ags_snowrain"; } - String expect_filename = apl->library.GetFilenameForLib(apl->filename); if (apl->library.Load(apl->filename)) { apl->_plugin = apl->library.getPlugin(); - AGS::Shared::Debug::Printf(kDbgMsg_Info, "Plugin '%s' loaded as '%s', resolving imports...", apl->filename.GetCStr(), expect_filename.GetCStr()); - + AGS::Shared::Debug::Printf(kDbgMsg_Info, "Plugin '%s' loaded from '%s', resolving imports...", apl->filename.GetCStr(), apl->library.GetFilePath().GetCStr()); } else { + String expect_filename = apl->library.GetFilenameForLib(apl->filename); AGS::Shared::Debug::Printf(kDbgMsg_Info, "Plugin '%s' could not be loaded (expected '%s')", apl->filename.GetCStr(), expect_filename.GetCStr()); _GP(plugins).pop_back();