# HG changeset patch # User vtchill@33b003aa-7bff-0310-803a-e67f0ece8222 # Date 1307507690 0 # Node ID 5e010218273d97b8e7cadbf7dae094aad6dbdcda # Parent be625cdff350e5c0656989e81f6b9ad9f5238289 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] diff -r be625cdff350 -r 5e010218273d engine/core/vfs/directoryprovider.cpp --- 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 // 3rd party library includes +#include +#include // 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."); } diff -r be625cdff350 -r 5e010218273d engine/core/vfs/directoryprovider.h --- 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;