[Scummvm-cvs-logs] SF.net SVN: scummvm: [32085] scummvm/trunk

jvprat at users.sourceforge.net jvprat at users.sourceforge.net
Tue May 13 15:24:49 CEST 2008


Revision: 32085
          http://scummvm.svn.sourceforge.net/scummvm/?rev=32085&view=rev
Author:   jvprat
Date:     2008-05-13 06:24:49 -0700 (Tue, 13 May 2008)

Log Message:
-----------
Taken care of FilePluginProvider's FIXMEs

Modified Paths:
--------------
    scummvm/trunk/backends/plugins/dc/dc-provider.cpp
    scummvm/trunk/backends/plugins/dc/dc-provider.h
    scummvm/trunk/backends/plugins/win32/win32-provider.cpp
    scummvm/trunk/backends/plugins/win32/win32-provider.h
    scummvm/trunk/base/plugins.cpp
    scummvm/trunk/base/plugins.h

Modified: scummvm/trunk/backends/plugins/dc/dc-provider.cpp
===================================================================
--- scummvm/trunk/backends/plugins/dc/dc-provider.cpp	2008-05-13 11:00:25 UTC (rev 32084)
+++ scummvm/trunk/backends/plugins/dc/dc-provider.cpp	2008-05-13 13:24:49 UTC (rev 32085)
@@ -83,9 +83,17 @@
 };
 
 
-Plugin* SDLPluginProvider::createPlugin(const Common::String &filename) const {
+Plugin* DCPluginProvider::createPlugin(const Common::String &filename) const {
 	return new DCPlugin(filename);
 }
 
+bool DCPluginProvider::isPluginFilename(const Common::String &filename) const {
+	// Check the plugin suffix
+	if (!filename.hasSuffix(".PLG"))
+		return false;
 
+	return true;
+}
+
+
 #endif // defined(DYNAMIC_MODULES) && defined(__DC__)

Modified: scummvm/trunk/backends/plugins/dc/dc-provider.h
===================================================================
--- scummvm/trunk/backends/plugins/dc/dc-provider.h	2008-05-13 11:00:25 UTC (rev 32084)
+++ scummvm/trunk/backends/plugins/dc/dc-provider.h	2008-05-13 13:24:49 UTC (rev 32085)
@@ -34,8 +34,7 @@
 protected:
 	Plugin* createPlugin(const Common::String &filename) const;
 
-	virtual const char* getPrefix() const { return ""; }
-	virtual const char* getSuffix() const { return ".PLG"; }
+	bool isPluginFilename(const Common::String &filename) const;
 
 	virtual void addCustomDirectories(Common::StringList &dirs) const {
 		dirs.push_back("/");

Modified: scummvm/trunk/backends/plugins/win32/win32-provider.cpp
===================================================================
--- scummvm/trunk/backends/plugins/win32/win32-provider.cpp	2008-05-13 11:00:25 UTC (rev 32084)
+++ scummvm/trunk/backends/plugins/win32/win32-provider.cpp	2008-05-13 13:24:49 UTC (rev 32085)
@@ -107,5 +107,13 @@
 	return new Win32Plugin(filename);
 }
 
+bool Win32PluginProvider::isPluginFilename(const Common::String &filename) const {
+	// Check the plugin suffix
+	if (!filename.hasSuffix(".dll"))
+		return false;
 
+	return true;
+}
+
+
 #endif // defined(DYNAMIC_MODULES) && defined(_WIN32)

Modified: scummvm/trunk/backends/plugins/win32/win32-provider.h
===================================================================
--- scummvm/trunk/backends/plugins/win32/win32-provider.h	2008-05-13 11:00:25 UTC (rev 32084)
+++ scummvm/trunk/backends/plugins/win32/win32-provider.h	2008-05-13 13:24:49 UTC (rev 32085)
@@ -34,8 +34,7 @@
 protected:
 	Plugin* createPlugin(const Common::String &filename) const;
 
-	virtual const char* getPrefix() const { return ""; }
-	virtual const char* getSuffix() const { return ".dll"; }
+	bool isPluginFilename(const Common::String &filename) const;
 
 	virtual void addCustomDirectories(Common::StringList &dirs) const {}
 };

Modified: scummvm/trunk/base/plugins.cpp
===================================================================
--- scummvm/trunk/base/plugins.cpp	2008-05-13 11:00:25 UTC (rev 32084)
+++ scummvm/trunk/base/plugins.cpp	2008-05-13 13:24:49 UTC (rev 32085)
@@ -27,7 +27,6 @@
 
 #ifdef DYNAMIC_MODULES
 #include "common/config-manager.h"
-#include "common/fs.h"
 #endif
 
 // Plugin versioning
@@ -151,38 +150,34 @@
 	PluginList pl;
 
 	// Prepare the list of directories to search
-	Common::StringList pluginDirs;
+	FSList pluginDirs;
 
 	// Add the default directories
-	pluginDirs.push_back(".");
-	pluginDirs.push_back("plugins");
+	pluginDirs.push_back(FilesystemNode("."));
+	pluginDirs.push_back(FilesystemNode("plugins"));
 
 	// Add the provider's custom directories
 	addCustomDirectories(pluginDirs);
 
 	// Add the user specified directory
 	Common::String pluginsPath(ConfMan.get("pluginspath"));
-	if (!pluginsPath.empty()) {
-		FilesystemNode dir(pluginsPath);
-		pluginDirs.push_back(dir.getPath());
-	}
+	if (!pluginsPath.empty())
+		pluginDirs.push_back(FilesystemNode(pluginsPath));
 
-	Common::StringList::const_iterator d;
-	for (d = pluginDirs.begin(); d != pluginDirs.end(); d++) {
+	FSList::const_iterator dir;
+	for (dir = pluginDirs.begin(); dir != pluginDirs.end(); dir++) {
 		// Load all plugins.
 		// Scan for all plugins in this directory
-		FilesystemNode dir(*d);
 		FSList files;
-		if (!dir.getChildren(files, FilesystemNode::kListFilesOnly)) {
-			debug(1, "Couldn't open plugin directory '%s'", d->c_str());
+		if (!dir->getChildren(files, FilesystemNode::kListFilesOnly)) {
+			debug(1, "Couldn't open plugin directory '%s'", dir->getPath().c_str());
 			continue;
 		} else {
-			debug(1, "Reading plugins from plugin directory '%s'", d->c_str());
+			debug(1, "Reading plugins from plugin directory '%s'", dir->getPath().c_str());
 		}
 
 		for (FSList::const_iterator i = files.begin(); i != files.end(); ++i) {
-			Common::String name(i->getName());
-			if (name.hasPrefix(getPrefix()) && name.hasSuffix(getSuffix())) {
+			if (isPluginFilename(i->getName())) {
 				pl.push_back(createPlugin(i->getPath()));
 			}
 		}
@@ -191,25 +186,25 @@
 	return pl;
 }
 
-const char* FilePluginProvider::getPrefix() const {
+bool FilePluginProvider::isPluginFilename(const Common::String &filename) const {
 #ifdef PLUGIN_PREFIX
-	return PLUGIN_PREFIX;
-#else
-	return "";
+	// Check the plugin prefix
+	if (!filename.hasPrefix(PLUGIN_PREFIX))
+		return false;
 #endif
-}
 
-const char* FilePluginProvider::getSuffix() const {
 #ifdef PLUGIN_SUFFIX
-	return PLUGIN_SUFFIX;
-#else
-	return "";
+	// Check the plugin suffix
+	if (!filename.hasSuffix(PLUGIN_SUFFIX))
+		return false;
 #endif
+
+	return true;
 }
 
-void FilePluginProvider::addCustomDirectories(Common::StringList &dirs) const {
+void FilePluginProvider::addCustomDirectories(FSList &dirs) const {
 #ifdef PLUGIN_DIRECTORY
-	dirs.push_back(PLUGIN_DIRECTORY);
+	dirs.push_back(FilesystemNode(PLUGIN_DIRECTORY));
 #endif
 }
 

Modified: scummvm/trunk/base/plugins.h
===================================================================
--- scummvm/trunk/base/plugins.h	2008-05-13 11:00:25 UTC (rev 32084)
+++ scummvm/trunk/base/plugins.h	2008-05-13 13:24:49 UTC (rev 32085)
@@ -31,6 +31,9 @@
 #include "common/singleton.h"
 #include "base/game.h"
 
+#ifdef DYNAMIC_MODULES
+#include "common/fs.h"
+#endif
 
 /**
  * @page pagePlugins An overview of the ScummVM plugin system
@@ -212,6 +215,8 @@
 	virtual PluginList getPlugins() = 0;
 };
 
+#ifdef DYNAMIC_MODULES
+
 /**
  * Abstract base class for Plugin factories which load binary code from files.
  * Subclasses only have to implement the createPlugin() method, and optionally
@@ -238,24 +243,30 @@
 	 *
 	 * @param filename	the name of the loadable code module
 	 * @return	a pointer to a Plugin instance, or 0 if an error occurred.
-	 *
-	 * FIXME: Instead of using getPrefix & getSuffix, how about adding a
-	 * isPluginFilename() class, so that more flexible checks can be performed?
 	 */
 	virtual Plugin* createPlugin(const Common::String &filename) const = 0;
 
-	virtual const char* getPrefix() const;
-	virtual const char* getSuffix() const;
+	/**
+	 * Check if the supplied filename corresponds to a loadable plugin file in
+	 * the current platform.
+	 *
+	 * @param filename	the name of the file to check
+	 * @return	true if the filename corresponds to a plugin, false otherwise
+	 */
+	virtual bool isPluginFilename(const Common::String &filename) const;
 
 	/**
 	 * Optionally add to the list of directories to be searched for
 	 * plugins by getPlugins().
 	 *
-	 * FIXME: This should be using FSNodes, not strings!
+	 * @param dirs	the reference to the list of directories to be used when
+	 * 		searching for plugins.
 	 */
-	virtual void addCustomDirectories(Common::StringList &dirs) const;
+	virtual void addCustomDirectories(FSList &dirs) const;
 };
 
+#endif // DYNAMIC_MODULES
+
 /**
  * Singleton class which manages all plugins, including loading them,
  * managing all Plugin class instances, and unloading them.


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list