From c459f054b46b8791ce206c2ee13d455a9c10fe4d Mon Sep 17 00:00:00 2001 From: David Corrales Date: Thu, 3 May 2007 02:39:33 +0000 Subject: Use abstract factories to initialize FilesystemNode objects. svn-id: r26739 --- backends/fs/windows/WindowsFilesystemFactory.cpp | 23 +++ backends/fs/windows/WindowsFilesystemFactory.h | 38 +++++ backends/fs/windows/windows-fs.cpp | 199 ++++++++++++++--------- 3 files changed, 183 insertions(+), 77 deletions(-) create mode 100644 backends/fs/windows/WindowsFilesystemFactory.cpp create mode 100644 backends/fs/windows/WindowsFilesystemFactory.h (limited to 'backends/fs/windows') diff --git a/backends/fs/windows/WindowsFilesystemFactory.cpp b/backends/fs/windows/WindowsFilesystemFactory.cpp new file mode 100644 index 0000000000..a360fd1c7a --- /dev/null +++ b/backends/fs/windows/WindowsFilesystemFactory.cpp @@ -0,0 +1,23 @@ +#include "backends/fs/windows/WindowsFilesystemFactory.h" +#include "backends/fs/windows/windows-fs.cpp" + +WindowsFilesystemFactory *WindowsFilesystemFactory::_instance = 0; + +WindowsFilesystemFactory *WindowsFilesystemFactory::instance(){ + if(_instance == 0){ + _instance = new WindowsFilesystemFactory(); + } + return _instance; +} + +AbstractFilesystemNode *WindowsFilesystemFactory::makeRootFileNode() const { + return new WindowsFilesystemNode(); +} + +AbstractFilesystemNode *WindowsFilesystemFactory::makeCurrentDirectoryFileNode() const { + return new WindowsFilesystemNode(NULL, true); +} + +AbstractFilesystemNode *WindowsFilesystemFactory::makeFileNodePath(const String &path) const { + return new WindowsFilesystemNode(path, false); +} diff --git a/backends/fs/windows/WindowsFilesystemFactory.h b/backends/fs/windows/WindowsFilesystemFactory.h new file mode 100644 index 0000000000..0d965089c4 --- /dev/null +++ b/backends/fs/windows/WindowsFilesystemFactory.h @@ -0,0 +1,38 @@ +#ifndef WINDOWSFILESYSTEMFACTORY_H_ +#define WINDOWSFILESYSTEMFACTORY_H_ + +#include "backends/fs/AbstractFilesystemFactory.h" + +/** + * Creates WindowsFilesystemNode objects. + * + * Parts of this class are documented in the base interface class, AbstractFilesystemFactory. + */ +class WindowsFilesystemFactory : public AbstractFilesystemFactory { +public: + typedef Common::String String; + + /** + * Creates an instance of WindowsFilesystemFactory using the Singleton pattern. + * + * @return A unique instance of WindowsFilesytemFactory. + */ + static WindowsFilesystemFactory *instance(); + + /** + * Destructor. + */ + virtual ~WindowsFilesystemFactory() {}; + + virtual AbstractFilesystemNode *makeRootFileNode() const; + virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const; + virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const; + +protected: + WindowsFilesystemFactory() {}; + +private: + static WindowsFilesystemFactory *_instance; +}; + +#endif /*WINDOWSFILESYSTEMFACTORY_H_*/ diff --git a/backends/fs/windows/windows-fs.cpp b/backends/fs/windows/windows-fs.cpp index 32c1ab42e5..af19384e39 100644 --- a/backends/fs/windows/windows-fs.cpp +++ b/backends/fs/windows/windows-fs.cpp @@ -33,39 +33,90 @@ #endif #include -/* +/** * Implementation of the ScummVM file system API based on Windows API. + * + * Parts of this class are documented in the base interface class, AbstractFilesystemNode. */ - class WindowsFilesystemNode : public AbstractFilesystemNode { protected: String _displayName; + String _path; bool _isDirectory; - bool _isValid; bool _isPseudoRoot; - String _path; + bool _isValid; public: + /** + * Creates a WindowsFilesystemNode with the root node as path. + * + * In regular windows systems, a virtual root path is used "". + * In windows CE, the "\" root is used instead. + */ WindowsFilesystemNode(); - WindowsFilesystemNode(const String &path); - - virtual String displayName() const { return _displayName; } - virtual String name() const { return _displayName; } - virtual bool isValid() const { return _isValid; } + + /** + * Creates a WindowsFilesystemNode for a given path. + * + * Examples: + * path=c:\foo\bar.txt, currentDir=false -> c:\foo\bar.txt + * path=c:\foo\bar.txt, currentDir=true -> current directory + * path=NULL, currentDir=true -> current directory + * + * @param path String with the path the new node should point to. + * @param currentDir if true, the path parameter will be ignored and the resulting node will point to the current directory. + */ + WindowsFilesystemNode(const String &path, const bool currentDir); + + virtual String getDisplayName() const { return _displayName; } + virtual String getName() const { return _displayName; } + virtual String getPath() const { return _path; } virtual bool isDirectory() const { return _isDirectory; } - virtual String path() const { return _path; } + virtual bool isValid() const { return _isValid; } - virtual bool listDir(AbstractFSList &list, ListMode mode) const; - virtual AbstractFilesystemNode *parent() const; - virtual AbstractFilesystemNode *child(const String &n) const; + virtual AbstractFilesystemNode *getChild(const String &n) const; + virtual bool getChildren(AbstractFSList &list, ListMode mode) const; + virtual AbstractFilesystemNode *getParent() const; private: - static char *toAscii(TCHAR *x); - static const TCHAR* toUnicode(const char *x); - static void addFile (AbstractFSList &list, ListMode mode, const char *base, WIN32_FIND_DATA* find_data); + /** + * Adds a single WindowsFilesystemNode to a given list. + * This method is used by getChildren() to populate the directory entries list. + * + * @param list List to put the file entry node in. + * @param mode Mode to use while adding the file entry to the list. + * @param base String with the directory being listed. + * @param find_data Describes a file that the FindFirstFile, FindFirstFileEx, or FindNextFile functions find. + */ + static void addFile(AbstractFSList &list, ListMode mode, const char *base, WIN32_FIND_DATA* find_data); + + /** + * Converts a Unicode string to Ascii format. + * + * @param str String to convert from Unicode to Ascii. + * @return str in Ascii format. + */ + static char *toAscii(TCHAR *str); + + /** + * Converts an Ascii string to Unicode format. + * + * @param str String to convert from Ascii to Unicode. + * @return str in Unicode format. + */ + static const TCHAR* toUnicode(const char *str); }; - +/** + * Returns the last component of a given path. + * + * Examples: + * c:\foo\bar.txt would return "\bar.txt" + * c:\foo\bar\ would return "\bar\" + * + * @param str Path to obtain the last component from. + * @return Pointer to the first char of the last component inside str. + */ static const char *lastPathComponent(const Common::String &str) { const char *start = str.c_str(); const char *cur = start + str.size() - 2; @@ -77,27 +128,6 @@ static const char *lastPathComponent(const Common::String &str) { return cur + 1; } -char* WindowsFilesystemNode::toAscii(TCHAR *x) { - -#ifndef UNICODE - return (char*)x; -#else - static char asciiString[MAX_PATH]; - WideCharToMultiByte(CP_ACP, 0, x, _tcslen(x) + 1, asciiString, sizeof(asciiString), NULL, NULL); - return asciiString; -#endif -} - -const TCHAR* WindowsFilesystemNode::toUnicode(const char *x) { -#ifndef UNICODE - return (const TCHAR *)x; -#else - static TCHAR unicodeString[MAX_PATH]; - MultiByteToWideChar(CP_ACP, 0, x, strlen(x) + 1, unicodeString, sizeof(unicodeString) / sizeof(TCHAR)); - return unicodeString; -#endif -} - void WindowsFilesystemNode::addFile(AbstractFSList &list, ListMode mode, const char *base, WIN32_FIND_DATA* find_data) { WindowsFilesystemNode entry; char *asciiName = toAscii(find_data->cFileName); @@ -125,25 +155,24 @@ void WindowsFilesystemNode::addFile(AbstractFSList &list, ListMode mode, const c list.push_back(new WindowsFilesystemNode(entry)); } -AbstractFilesystemNode *AbstractFilesystemNode::getCurrentDirectory() { - char path[MAX_PATH]; - GetCurrentDirectory(MAX_PATH, path); - - // Add a trailing slash, if necessary. - if (path[0] != 0) { - if (path[strlen(path) - 1] != '\\') - strcat(path, "\\"); - } - - return new WindowsFilesystemNode(path); -} - -AbstractFilesystemNode *AbstractFilesystemNode::getRoot() { - return new WindowsFilesystemNode(); +char* WindowsFilesystemNode::toAscii(TCHAR *str) { +#ifndef UNICODE + return (char*)str; +#else + static char asciiString[MAX_PATH]; + WideCharToMultiByte(CP_ACP, 0, str, _tcslen(str) + 1, asciiString, sizeof(asciiString), NULL, NULL); + return asciiString; +#endif } -AbstractFilesystemNode *AbstractFilesystemNode::getNodeForPath(const String &path) { - return new WindowsFilesystemNode(path); +const TCHAR* WindowsFilesystemNode::toUnicode(const char *str) { +#ifndef UNICODE + return (const TCHAR *)str; +#else + static TCHAR unicodeString[MAX_PATH]; + MultiByteToWideChar(CP_ACP, 0, str, strlen(str) + 1, unicodeString, sizeof(unicodeString) / sizeof(TCHAR)); + return unicodeString; +#endif } WindowsFilesystemNode::WindowsFilesystemNode() { @@ -162,10 +191,23 @@ WindowsFilesystemNode::WindowsFilesystemNode() { #endif } -WindowsFilesystemNode::WindowsFilesystemNode(const String &p) { - assert(p.size() > 0); +WindowsFilesystemNode::WindowsFilesystemNode(const String &p, const bool currentDir) { + if (currentDir) { + char path[MAX_PATH]; + GetCurrentDirectory(MAX_PATH, path); - _path = p; + // Add a trailing slash, if necessary. + if (path[0] != 0) { + if (path[strlen(path) - 1] != '\\') + strcat(path, "\\"); + } + _path = path; + } + else { + assert(p.size() > 0); + _path = p; + } + _displayName = lastPathComponent(_path); // Check whether it is a directory, and whether the file actually exists @@ -181,7 +223,23 @@ WindowsFilesystemNode::WindowsFilesystemNode(const String &p) { _isPseudoRoot = false; } -bool WindowsFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const { +AbstractFilesystemNode *WindowsFilesystemNode::getChild(const String &n) const { + assert(_isDirectory); + + String newPath(_path); + if (_path.lastChar() != '\\') + newPath += '\\'; + newPath += n; + + // Check whether the directory actually exists + DWORD fileAttribs = GetFileAttributes(toUnicode(newPath.c_str())); + if (fileAttribs == INVALID_FILE_ATTRIBUTES) + return 0; + + return new WindowsFilesystemNode(newPath, false); +} + +bool WindowsFilesystemNode::getChildren(AbstractFSList &myList, ListMode mode) const { assert(_isDirectory); if (_isPseudoRoot) { @@ -227,10 +285,12 @@ bool WindowsFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const return true; } -AbstractFilesystemNode *WindowsFilesystemNode::parent() const { +AbstractFilesystemNode *WindowsFilesystemNode::getParent() const { assert(_isValid || _isPseudoRoot); + if (_isPseudoRoot) return 0; + WindowsFilesystemNode *p = new WindowsFilesystemNode(); if (_path.size() > 3) { const char *start = _path.c_str(); @@ -243,23 +303,8 @@ AbstractFilesystemNode *WindowsFilesystemNode::parent() const { p->_displayName = lastPathComponent(p->_path); p->_isPseudoRoot = false; } + return p; } -AbstractFilesystemNode *WindowsFilesystemNode::child(const String &n) const { - assert(_isDirectory); - String newPath(_path); - if (_path.lastChar() != '\\') - newPath += '\\'; - newPath += n; - - // Check whether the directory actually exists - DWORD fileAttribs = GetFileAttributes(toUnicode(newPath.c_str())); - if (fileAttribs == INVALID_FILE_ATTRIBUTES) - return 0; - - WindowsFilesystemNode *p = new WindowsFilesystemNode(newPath); - return p; -} - -#endif // WIN32 +#endif //#ifdef WIN32 -- cgit v1.2.3 From 86324f00bc561c03b281170125ef2fde14cae132 Mon Sep 17 00:00:00 2001 From: David Corrales Date: Sat, 12 May 2007 18:17:40 +0000 Subject: Renamed files and minor tweaks. Thanks LordHoto :) svn-id: r26810 --- backends/fs/windows/WindowsFilesystemFactory.cpp | 23 -------------- backends/fs/windows/WindowsFilesystemFactory.h | 38 ------------------------ backends/fs/windows/windows-fs-factory.cpp | 23 ++++++++++++++ backends/fs/windows/windows-fs-factory.h | 33 ++++++++++++++++++++ 4 files changed, 56 insertions(+), 61 deletions(-) delete mode 100644 backends/fs/windows/WindowsFilesystemFactory.cpp delete mode 100644 backends/fs/windows/WindowsFilesystemFactory.h create mode 100644 backends/fs/windows/windows-fs-factory.cpp create mode 100644 backends/fs/windows/windows-fs-factory.h (limited to 'backends/fs/windows') diff --git a/backends/fs/windows/WindowsFilesystemFactory.cpp b/backends/fs/windows/WindowsFilesystemFactory.cpp deleted file mode 100644 index a360fd1c7a..0000000000 --- a/backends/fs/windows/WindowsFilesystemFactory.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include "backends/fs/windows/WindowsFilesystemFactory.h" -#include "backends/fs/windows/windows-fs.cpp" - -WindowsFilesystemFactory *WindowsFilesystemFactory::_instance = 0; - -WindowsFilesystemFactory *WindowsFilesystemFactory::instance(){ - if(_instance == 0){ - _instance = new WindowsFilesystemFactory(); - } - return _instance; -} - -AbstractFilesystemNode *WindowsFilesystemFactory::makeRootFileNode() const { - return new WindowsFilesystemNode(); -} - -AbstractFilesystemNode *WindowsFilesystemFactory::makeCurrentDirectoryFileNode() const { - return new WindowsFilesystemNode(NULL, true); -} - -AbstractFilesystemNode *WindowsFilesystemFactory::makeFileNodePath(const String &path) const { - return new WindowsFilesystemNode(path, false); -} diff --git a/backends/fs/windows/WindowsFilesystemFactory.h b/backends/fs/windows/WindowsFilesystemFactory.h deleted file mode 100644 index 0d965089c4..0000000000 --- a/backends/fs/windows/WindowsFilesystemFactory.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef WINDOWSFILESYSTEMFACTORY_H_ -#define WINDOWSFILESYSTEMFACTORY_H_ - -#include "backends/fs/AbstractFilesystemFactory.h" - -/** - * Creates WindowsFilesystemNode objects. - * - * Parts of this class are documented in the base interface class, AbstractFilesystemFactory. - */ -class WindowsFilesystemFactory : public AbstractFilesystemFactory { -public: - typedef Common::String String; - - /** - * Creates an instance of WindowsFilesystemFactory using the Singleton pattern. - * - * @return A unique instance of WindowsFilesytemFactory. - */ - static WindowsFilesystemFactory *instance(); - - /** - * Destructor. - */ - virtual ~WindowsFilesystemFactory() {}; - - virtual AbstractFilesystemNode *makeRootFileNode() const; - virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const; - virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const; - -protected: - WindowsFilesystemFactory() {}; - -private: - static WindowsFilesystemFactory *_instance; -}; - -#endif /*WINDOWSFILESYSTEMFACTORY_H_*/ diff --git a/backends/fs/windows/windows-fs-factory.cpp b/backends/fs/windows/windows-fs-factory.cpp new file mode 100644 index 0000000000..fb77b4ca07 --- /dev/null +++ b/backends/fs/windows/windows-fs-factory.cpp @@ -0,0 +1,23 @@ +#include "backends/fs/windows/windows-fs-factory.h" +#include "backends/fs/windows/windows-fs.cpp" + +WindowsFilesystemFactory *WindowsFilesystemFactory::_instance = 0; + +WindowsFilesystemFactory *WindowsFilesystemFactory::instance(){ + if(_instance == 0){ + _instance = new WindowsFilesystemFactory(); + } + return _instance; +} + +AbstractFilesystemNode *WindowsFilesystemFactory::makeRootFileNode() const { + return new WindowsFilesystemNode(); +} + +AbstractFilesystemNode *WindowsFilesystemFactory::makeCurrentDirectoryFileNode() const { + return new WindowsFilesystemNode(NULL, true); +} + +AbstractFilesystemNode *WindowsFilesystemFactory::makeFileNodePath(const String &path) const { + return new WindowsFilesystemNode(path, false); +} diff --git a/backends/fs/windows/windows-fs-factory.h b/backends/fs/windows/windows-fs-factory.h new file mode 100644 index 0000000000..a7abf390ae --- /dev/null +++ b/backends/fs/windows/windows-fs-factory.h @@ -0,0 +1,33 @@ +#ifndef WINDOWS_FILESYSTEM_FACTORY_H +#define WINDOWS_FILESYSTEM_FACTORY_H + +#include "backends/fs/abstract-fs-factory.h" + +/** + * Creates WindowsFilesystemNode objects. + * + * Parts of this class are documented in the base interface class, AbstractFilesystemFactory. + */ +class WindowsFilesystemFactory : public AbstractFilesystemFactory { +public: + typedef Common::String String; + + /** + * Creates an instance of WindowsFilesystemFactory using the Singleton pattern. + * + * @return A unique instance of WindowsFilesytemFactory. + */ + static WindowsFilesystemFactory *instance(); + + virtual AbstractFilesystemNode *makeRootFileNode() const; + virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const; + virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const; + +protected: + WindowsFilesystemFactory() {}; + +private: + static WindowsFilesystemFactory *_instance; +}; + +#endif /*WINDOWS_FILESYSTEM_FACTORY_H*/ -- cgit v1.2.3 From d1f56d93f934150f4b579c2e90564e2bf035f113 Mon Sep 17 00:00:00 2001 From: David Corrales Date: Sat, 12 May 2007 20:00:52 +0000 Subject: Use common/singleton.h in the concrete fs factories. svn-id: r26814 --- backends/fs/windows/windows-fs-factory.cpp | 9 +-------- backends/fs/windows/windows-fs-factory.h | 11 ++--------- 2 files changed, 3 insertions(+), 17 deletions(-) (limited to 'backends/fs/windows') diff --git a/backends/fs/windows/windows-fs-factory.cpp b/backends/fs/windows/windows-fs-factory.cpp index fb77b4ca07..76b62e5deb 100644 --- a/backends/fs/windows/windows-fs-factory.cpp +++ b/backends/fs/windows/windows-fs-factory.cpp @@ -1,14 +1,7 @@ #include "backends/fs/windows/windows-fs-factory.h" #include "backends/fs/windows/windows-fs.cpp" -WindowsFilesystemFactory *WindowsFilesystemFactory::_instance = 0; - -WindowsFilesystemFactory *WindowsFilesystemFactory::instance(){ - if(_instance == 0){ - _instance = new WindowsFilesystemFactory(); - } - return _instance; -} +DECLARE_SINGLETON(WindowsFilesystemFactory); AbstractFilesystemNode *WindowsFilesystemFactory::makeRootFileNode() const { return new WindowsFilesystemNode(); diff --git a/backends/fs/windows/windows-fs-factory.h b/backends/fs/windows/windows-fs-factory.h index a7abf390ae..b260eab65a 100644 --- a/backends/fs/windows/windows-fs-factory.h +++ b/backends/fs/windows/windows-fs-factory.h @@ -8,17 +8,10 @@ * * Parts of this class are documented in the base interface class, AbstractFilesystemFactory. */ -class WindowsFilesystemFactory : public AbstractFilesystemFactory { +class WindowsFilesystemFactory : public AbstractFilesystemFactory, public Common::Singleton { public: typedef Common::String String; - /** - * Creates an instance of WindowsFilesystemFactory using the Singleton pattern. - * - * @return A unique instance of WindowsFilesytemFactory. - */ - static WindowsFilesystemFactory *instance(); - virtual AbstractFilesystemNode *makeRootFileNode() const; virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const; virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const; @@ -27,7 +20,7 @@ protected: WindowsFilesystemFactory() {}; private: - static WindowsFilesystemFactory *_instance; + friend class Common::Singleton; }; #endif /*WINDOWS_FILESYSTEM_FACTORY_H*/ -- cgit v1.2.3 From 6c69d531d262e14fa02b6e1adb42baaa5c74dbe6 Mon Sep 17 00:00:00 2001 From: David Corrales Date: Thu, 31 May 2007 21:42:01 +0000 Subject: Removed the now obsolete singleton declaration macro from the FSNode factories. svn-id: r27031 --- backends/fs/windows/windows-fs-factory.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'backends/fs/windows') diff --git a/backends/fs/windows/windows-fs-factory.cpp b/backends/fs/windows/windows-fs-factory.cpp index 76b62e5deb..6025264209 100644 --- a/backends/fs/windows/windows-fs-factory.cpp +++ b/backends/fs/windows/windows-fs-factory.cpp @@ -1,8 +1,6 @@ #include "backends/fs/windows/windows-fs-factory.h" #include "backends/fs/windows/windows-fs.cpp" -DECLARE_SINGLETON(WindowsFilesystemFactory); - AbstractFilesystemNode *WindowsFilesystemFactory::makeRootFileNode() const { return new WindowsFilesystemNode(); } -- cgit v1.2.3 From 3e7c5b027e2131cde30d994ccdb27c77f0118ffe Mon Sep 17 00:00:00 2001 From: David Corrales Date: Mon, 4 Jun 2007 03:46:56 +0000 Subject: Added a missing include in non-POSIX factories. For the POSIX and Windows architectures, added exists(), isReadable() and isWritable() svn-id: r27073 --- backends/fs/windows/windows-fs-factory.h | 1 + backends/fs/windows/windows-fs.cpp | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) (limited to 'backends/fs/windows') diff --git a/backends/fs/windows/windows-fs-factory.h b/backends/fs/windows/windows-fs-factory.h index b260eab65a..7d17802b52 100644 --- a/backends/fs/windows/windows-fs-factory.h +++ b/backends/fs/windows/windows-fs-factory.h @@ -1,6 +1,7 @@ #ifndef WINDOWS_FILESYSTEM_FACTORY_H #define WINDOWS_FILESYSTEM_FACTORY_H +#include "common/singleton.h" #include "backends/fs/abstract-fs-factory.h" /** diff --git a/backends/fs/windows/windows-fs.cpp b/backends/fs/windows/windows-fs.cpp index 88d04e1643..9cd6aa40a0 100644 --- a/backends/fs/windows/windows-fs.cpp +++ b/backends/fs/windows/windows-fs.cpp @@ -29,6 +29,7 @@ #endif #include "common/stdafx.h" #include "backends/fs/abstract-fs.h" +#include #include #include #ifndef _WIN32_WCE @@ -70,11 +71,14 @@ public: * @param currentDir if true, the path parameter will be ignored and the resulting node will point to the current directory. */ WindowsFilesystemNode(const String &path, const bool currentDir); - + + virtual bool exists() const { return _access(_path.c_str(), F_OK) == 0; } virtual String getDisplayName() const { return _displayName; } virtual String getName() const { return _displayName; } virtual String getPath() const { return _path; } virtual bool isDirectory() const { return _isDirectory; } + virtual bool isReadable() const { return _access(_path.c_str(), R_OK) == 0; } + virtual bool isWritable() const { return _access(_path.c_str(), W_OK) == 0; } virtual bool isValid() const { return _isValid; } virtual AbstractFilesystemNode *getChild(const String &n) const; @@ -217,11 +221,11 @@ WindowsFilesystemNode::WindowsFilesystemNode(const String &p, const bool current DWORD fileAttribs = GetFileAttributes(toUnicode(_path.c_str())); if (fileAttribs == INVALID_FILE_ATTRIBUTES) { - _isValid = false; _isDirectory = false; + _isValid = false; } else { - _isValid = true; _isDirectory = ((fileAttribs & FILE_ATTRIBUTE_DIRECTORY) != 0); + _isValid = true; } _isPseudoRoot = false; } @@ -276,9 +280,12 @@ bool WindowsFilesystemNode::getChildren(AbstractFSList &myList, ListMode mode) c sprintf(searchPath, "%s*", _path.c_str()); handle = FindFirstFile(toUnicode(searchPath), &desc); + if (handle == INVALID_HANDLE_VALUE) return false; + addFile(myList, mode, _path.c_str(), &desc); + while (FindNextFile(handle, &desc)) addFile(myList, mode, _path.c_str(), &desc); -- cgit v1.2.3 From fedfe66831ebed2822fe74c86ed59b6d69326f3d Mon Sep 17 00:00:00 2001 From: David Corrales Date: Mon, 4 Jun 2007 22:02:35 +0000 Subject: Added stubs for the exists(), isReadable() and isWritable() methods for all architectures. svn-id: r27087 --- backends/fs/windows/windows-fs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'backends/fs/windows') diff --git a/backends/fs/windows/windows-fs.cpp b/backends/fs/windows/windows-fs.cpp index 9cd6aa40a0..5a9e1c65b6 100644 --- a/backends/fs/windows/windows-fs.cpp +++ b/backends/fs/windows/windows-fs.cpp @@ -78,8 +78,8 @@ public: virtual String getPath() const { return _path; } virtual bool isDirectory() const { return _isDirectory; } virtual bool isReadable() const { return _access(_path.c_str(), R_OK) == 0; } - virtual bool isWritable() const { return _access(_path.c_str(), W_OK) == 0; } virtual bool isValid() const { return _isValid; } + virtual bool isWritable() const { return _access(_path.c_str(), W_OK) == 0; } virtual AbstractFilesystemNode *getChild(const String &n) const; virtual bool getChildren(AbstractFSList &list, ListMode mode) const; -- cgit v1.2.3 From 8a36379d55afbfd5e322c1e216a11447a4de8a51 Mon Sep 17 00:00:00 2001 From: David Corrales Date: Mon, 9 Jul 2007 01:16:13 +0000 Subject: Fixed a couple compilation issues in the windows build. svn-id: r27983 --- backends/fs/windows/windows-fs-factory.cpp | 2 +- backends/fs/windows/windows-fs.cpp | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'backends/fs/windows') diff --git a/backends/fs/windows/windows-fs-factory.cpp b/backends/fs/windows/windows-fs-factory.cpp index 76b62e5deb..3d7a3cc672 100644 --- a/backends/fs/windows/windows-fs-factory.cpp +++ b/backends/fs/windows/windows-fs-factory.cpp @@ -8,7 +8,7 @@ AbstractFilesystemNode *WindowsFilesystemFactory::makeRootFileNode() const { } AbstractFilesystemNode *WindowsFilesystemFactory::makeCurrentDirectoryFileNode() const { - return new WindowsFilesystemNode(NULL, true); + return new WindowsFilesystemNode("", true); } AbstractFilesystemNode *WindowsFilesystemFactory::makeFileNodePath(const String &path) const { diff --git a/backends/fs/windows/windows-fs.cpp b/backends/fs/windows/windows-fs.cpp index 5a9e1c65b6..995264f110 100644 --- a/backends/fs/windows/windows-fs.cpp +++ b/backends/fs/windows/windows-fs.cpp @@ -82,7 +82,7 @@ public: virtual bool isWritable() const { return _access(_path.c_str(), W_OK) == 0; } virtual AbstractFilesystemNode *getChild(const String &n) const; - virtual bool getChildren(AbstractFSList &list, ListMode mode) const; + virtual bool getChildren(AbstractFSList &list, ListMode mode, bool hidden) const; virtual AbstractFilesystemNode *getParent() const; private: @@ -246,9 +246,11 @@ AbstractFilesystemNode *WindowsFilesystemNode::getChild(const String &n) const { return new WindowsFilesystemNode(newPath, false); } -bool WindowsFilesystemNode::getChildren(AbstractFSList &myList, ListMode mode) const { +bool WindowsFilesystemNode::getChildren(AbstractFSList &myList, ListMode mode, bool hidden) const { assert(_isDirectory); + //TODO: honor the hidden flag + if (_isPseudoRoot) { #ifndef _WIN32_WCE // Drives enumeration -- cgit v1.2.3 From 1400d28bfb37fc94f3c44dec0a4d0cef65fb8fb7 Mon Sep 17 00:00:00 2001 From: David Corrales Date: Wed, 1 Aug 2007 22:07:50 +0000 Subject: Initial commit of the new BaseFile implementation. It provides a common ground for file objects across platforms and divides responsibilities between the Common::File class and a base file implementation. Also rearranged the factories into a new directory for clarity. Note 1: The posix-file.h and cpp files are for testing only. Only the ds, ps2 and symbian architecture will use special BaseFile based objects. Note 2: The current code does not yet make use of this new structure, since the Common::File remains intact. svn-id: r28395 --- backends/fs/windows/windows-fs-factory.cpp | 16 ---------------- backends/fs/windows/windows-fs-factory.h | 27 --------------------------- 2 files changed, 43 deletions(-) delete mode 100644 backends/fs/windows/windows-fs-factory.cpp delete mode 100644 backends/fs/windows/windows-fs-factory.h (limited to 'backends/fs/windows') diff --git a/backends/fs/windows/windows-fs-factory.cpp b/backends/fs/windows/windows-fs-factory.cpp deleted file mode 100644 index 3d7a3cc672..0000000000 --- a/backends/fs/windows/windows-fs-factory.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include "backends/fs/windows/windows-fs-factory.h" -#include "backends/fs/windows/windows-fs.cpp" - -DECLARE_SINGLETON(WindowsFilesystemFactory); - -AbstractFilesystemNode *WindowsFilesystemFactory::makeRootFileNode() const { - return new WindowsFilesystemNode(); -} - -AbstractFilesystemNode *WindowsFilesystemFactory::makeCurrentDirectoryFileNode() const { - return new WindowsFilesystemNode("", true); -} - -AbstractFilesystemNode *WindowsFilesystemFactory::makeFileNodePath(const String &path) const { - return new WindowsFilesystemNode(path, false); -} diff --git a/backends/fs/windows/windows-fs-factory.h b/backends/fs/windows/windows-fs-factory.h deleted file mode 100644 index 7d17802b52..0000000000 --- a/backends/fs/windows/windows-fs-factory.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef WINDOWS_FILESYSTEM_FACTORY_H -#define WINDOWS_FILESYSTEM_FACTORY_H - -#include "common/singleton.h" -#include "backends/fs/abstract-fs-factory.h" - -/** - * Creates WindowsFilesystemNode objects. - * - * Parts of this class are documented in the base interface class, AbstractFilesystemFactory. - */ -class WindowsFilesystemFactory : public AbstractFilesystemFactory, public Common::Singleton { -public: - typedef Common::String String; - - virtual AbstractFilesystemNode *makeRootFileNode() const; - virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const; - virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const; - -protected: - WindowsFilesystemFactory() {}; - -private: - friend class Common::Singleton; -}; - -#endif /*WINDOWS_FILESYSTEM_FACTORY_H*/ -- cgit v1.2.3