Mercurial > fife-parpg
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;