changeset 693:5e010218273d

This commit is to back port a fix from 0.3.3 dev branch to the trunk. The directory provider will now use the boost::filesystem::is_directory function to determine if the passed in source is a directory. This allows a python client (through VFS::addNewSource) to add a directory source that is either an absolute path or a relative path from where the application is launched. [t:544]
author vtchill@33b003aa-7bff-0310-803a-e67f0ece8222
date Wed, 08 Jun 2011 04:34:50 +0000
parents be625cdff350
children e201abd8c807
files engine/core/vfs/directoryprovider.cpp engine/core/vfs/directoryprovider.h
diffstat 2 files changed, 15 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/engine/core/vfs/directoryprovider.cpp	Wed Jun 08 03:08:58 2011 +0000
+++ b/engine/core/vfs/directoryprovider.cpp	Wed Jun 08 04:34:50 2011 +0000
@@ -23,6 +23,8 @@
 #include <iostream>
 
 // 3rd party library includes
+#include <boost/filesystem.hpp>
+#include <boost/filesystem/operations.hpp>
 
 // FIFE includes
 // These includes are split up in two parts, separated by one empty line
@@ -34,14 +36,17 @@
 #include "directoryprovider.h"
 #include "vfsdirectory.h"
 
+// alias boost::filesystem namespace to make shorter
+namespace bfs = boost::filesystem;
+
 namespace FIFE {
 	bool DirectoryProvider::isReadable(const std::string& path) const {
-		return getVFS()->isDirectory(path);
+        return bfs::is_directory(bfs::path(path));
 	}
 
 	FIFE::VFSSource* DirectoryProvider::createSource(const std::string& path) const {
 		if (isReadable(path))
-			return new VFSDirectory(getVFS(), path);
+            return new VFSDirectory(getVFS(), path);
 		else
 			throw Exception("Path " + path + " is not readable.");
 	}
--- a/engine/core/vfs/directoryprovider.h	Wed Jun 08 03:08:58 2011 +0000
+++ b/engine/core/vfs/directoryprovider.h	Wed Jun 08 04:34:50 2011 +0000
@@ -43,18 +43,20 @@
 		public:
 			DirectoryProvider() : VFSSourceProvider("OS Directory") { }
 
-			/** Check if a given directory is readable for this VFSSource.
- 			 * Directory sources must be denoted by a trailing '/', otherwise VFS will consider
- 			 * the source to be a file, and unreadable asa a directory.
+			/** Check if a given directory is readable.
+ 			 * The path must either be an absolute path or relative
+             * to the current working directory where the client was launched
 			 *
-			 * @param file the filename to check
+			 * @param path the filename to check
 			 * @return true if readable, false otherwise
 			 */
 			virtual bool isReadable(const std::string& path) const;
 
 			/** Create a new instance of a VFSSource initialized with the given directory
-			 *
-			 * @param file the directory to open
+			 * This will only pass if the path is readable and recognized
+             * as a directory as per the description of isReadable
+             *
+			 * @param path the directory to open
 			 * @return the new VFSSource
 			 */
 			virtual VFSSource* createSource(const std::string& path) const;