[Scummvm-cvs-logs] SF.net SVN: scummvm: [22315] scummvm/trunk/gui
fingolfin at users.sourceforge.net
fingolfin at users.sourceforge.net
Wed May 3 13:44:09 CEST 2006
Revision: 22315
Author: fingolfin
Date: 2006-05-03 13:43:26 -0700 (Wed, 03 May 2006)
ViewCVS: http://svn.sourceforge.net/scummvm/?rev=22315&view=rev
Log Message:
-----------
Changed FilesystemNode::listDir to return a bool indicating its success (or failure)
Modified Paths:
--------------
scummvm/trunk/backends/fs/abstract-fs.h
scummvm/trunk/backends/fs/amigaos4/amigaos4-fs.cpp
scummvm/trunk/backends/fs/fs.cpp
scummvm/trunk/backends/fs/fs.h
scummvm/trunk/backends/fs/morphos/abox-fs.cpp
scummvm/trunk/backends/fs/palmos/palmos-fs.cpp
scummvm/trunk/backends/fs/posix/posix-fs.cpp
scummvm/trunk/backends/fs/ps2/ps2-fs.cpp
scummvm/trunk/backends/fs/symbian/symbian-fs.cpp
scummvm/trunk/backends/fs/windows/windows-fs.cpp
scummvm/trunk/base/main.cpp
scummvm/trunk/common/file.cpp
scummvm/trunk/engines/scumm/plugin.cpp
scummvm/trunk/engines/sword1/sword1.cpp
scummvm/trunk/gui/launcher.cpp
Modified: scummvm/trunk/backends/fs/abstract-fs.h
===================================================================
--- scummvm/trunk/backends/fs/abstract-fs.h 2006-05-03 19:34:53 UTC (rev 22314)
+++ scummvm/trunk/backends/fs/abstract-fs.h 2006-05-03 20:43:26 UTC (rev 22315)
@@ -88,7 +88,7 @@
virtual bool isValid() const = 0;
virtual bool isDirectory() const = 0;
virtual String path() const = 0;
- virtual AbstractFSList listDir(ListMode mode) const = 0;
+ virtual bool listDir(AbstractFSList &list, ListMode mode) const = 0;
/* TODO:
Modified: scummvm/trunk/backends/fs/amigaos4/amigaos4-fs.cpp
===================================================================
--- scummvm/trunk/backends/fs/amigaos4/amigaos4-fs.cpp 2006-05-03 19:34:53 UTC (rev 22314)
+++ scummvm/trunk/backends/fs/amigaos4/amigaos4-fs.cpp 2006-05-03 20:43:26 UTC (rev 22315)
@@ -69,7 +69,7 @@
virtual bool isDirectory() const { return _bIsDirectory; };
virtual String path() const { return _sPath; };
- virtual AbstractFSList listDir(ListMode mode) const;
+ virtual bool listDir(AbstractFSList &list, ListMode mode) const;
virtual AbstractFSList listVolumes(void) const;
virtual AbstractFilesystemNode *parent() const;
virtual AbstractFilesystemNode *child(const String &name) const;
@@ -222,27 +222,26 @@
LEAVE();
}
-AbstractFSList AmigaOSFilesystemNode::listDir(ListMode mode) const {
+bool AmigaOSFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const {
ENTER();
- AbstractFSList myList;
-
if (!_bIsValid) {
debug(6, "Invalid node");
LEAVE();
- return myList; // Empty list
+ return false; // Empty list
}
if (!_bIsDirectory) {
debug(6, "Not a directory");
LEAVE();
- return myList; // Empty list
+ return false; // Empty list
}
if (_pFileLock == 0) {
debug(6, "Root node");
LEAVE();
- return listVolumes();
+ myList = listVolumes();
+ return true;
}
struct ExAllControl *eac = (struct ExAllControl *)IDOS->AllocDosObject(DOS_EXALLCONTROL, 0);
@@ -293,7 +292,7 @@
}
LEAVE();
- return myList;
+ return true;
}
AbstractFilesystemNode *AmigaOSFilesystemNode::parent() const {
Modified: scummvm/trunk/backends/fs/fs.cpp
===================================================================
--- scummvm/trunk/backends/fs/fs.cpp 2006-05-03 19:34:53 UTC (rev 22314)
+++ scummvm/trunk/backends/fs/fs.cpp 2006-05-03 20:43:26 UTC (rev 22315)
@@ -99,17 +99,21 @@
return FilesystemNode(node);
}
-FSList FilesystemNode::listDir(ListMode mode) const {
- assert(_realNode);
- assert(_realNode->isDirectory());
- AbstractFSList inList(_realNode->listDir(mode));
- FSList outList;
+bool FilesystemNode::listDir(FSList &fslist, ListMode mode) const {
+ if (!_realNode || !_realNode->isDirectory())
+ return false;
+
+ AbstractFSList tmp;
- for (AbstractFSList::iterator i = inList.begin(); i != inList.end(); ++i) {
- outList.push_back(FilesystemNode(*i));
+ if (!_realNode->listDir(tmp, mode))
+ return false;
+
+ fslist.clear();
+ for (AbstractFSList::iterator i = tmp.begin(); i != tmp.end(); ++i) {
+ fslist.push_back(FilesystemNode(*i));
}
- return outList;
+ return true;
}
Common::String FilesystemNode::displayName() const {
Modified: scummvm/trunk/backends/fs/fs.h
===================================================================
--- scummvm/trunk/backends/fs/fs.h 2006-05-03 19:34:53 UTC (rev 22314)
+++ scummvm/trunk/backends/fs/fs.h 2006-05-03 20:43:26 UTC (rev 22315)
@@ -106,11 +106,12 @@
FilesystemNode getChild(const String &name) const;
/**
- * Return a list of child nodes of this directory node. If called
- * on a node that does not represent a directory, an error is triggered.
+ * Return a list of child nodes of this directory node. If called on a node
+ * that does not represent a directory, false is returned.
+ * @return true if succesful, false otherwise (e.g. when the directory does not exist).
* @todo Rename this to listChildren or getChildren.
*/
- virtual FSList listDir(ListMode mode = kListDirectoriesOnly) const;
+ virtual bool listDir(FSList &fslist, ListMode mode = kListDirectoriesOnly) const;
/**
* Return a human readable string for this node, usable for display (e.g.
Modified: scummvm/trunk/backends/fs/morphos/abox-fs.cpp
===================================================================
--- scummvm/trunk/backends/fs/morphos/abox-fs.cpp 2006-05-03 19:34:53 UTC (rev 22314)
+++ scummvm/trunk/backends/fs/morphos/abox-fs.cpp 2006-05-03 20:43:26 UTC (rev 22315)
@@ -51,7 +51,7 @@
virtual bool isDirectory() const { return _isDirectory; }
virtual String path() const { return _path; }
- virtual AbstractFSList listDir(ListMode mode) const;
+ virtual bool listDir(AbstractFSList &list, ListMode mode) const;
static AbstractFSList listRoot();
virtual AbstractFilesystemNode *parent() const;
virtual AbstractFilesystemNode *child(const String &name) const;
@@ -129,10 +129,8 @@
}
}
-AbstractFSList ABoxFilesystemNode::listDir(ListMode mode) const
+bool ABoxFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const
{
- AbstractFSList myList;
-
if (!_isValid)
error("listDir() called on invalid node");
@@ -142,7 +140,8 @@
if (_lock == NULL)
{
/* This is the root node */
- return listRoot();
+ myList = listRoot();
+ return true;
}
/* "Normal" file system directory */
@@ -151,7 +150,7 @@
if (fib == NULL)
{
warning("Failed to allocate memory for FileInfoBlock");
- return myList;
+ return false;
}
if (Examine(_lock, fib) != DOSFALSE)
@@ -189,7 +188,7 @@
FreeDosObject(DOS_FIB, fib);
- return myList;
+ return tree;
}
AbstractFilesystemNode *ABoxFilesystemNode::parent() const
Modified: scummvm/trunk/backends/fs/palmos/palmos-fs.cpp
===================================================================
--- scummvm/trunk/backends/fs/palmos/palmos-fs.cpp 2006-05-03 19:34:53 UTC (rev 22314)
+++ scummvm/trunk/backends/fs/palmos/palmos-fs.cpp 2006-05-03 20:43:26 UTC (rev 22315)
@@ -48,7 +48,7 @@
virtual bool isDirectory() const { return _isDirectory; }
virtual String path() const { return _path; }
- virtual AbstractFSList listDir(ListMode) const;
+ virtual bool listDir(AbstractFSList &list, ListMode mode) const;
virtual AbstractFilesystemNode *parent() const;
virtual AbstractFilesystemNode *child(const String &name) const;
@@ -116,8 +116,7 @@
_path = node._path;
}
-AbstractFSList PalmOSFilesystemNode::listDir(ListMode mode) const {
- AbstractFSList myList;
+bool PalmOSFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const {
Err e;
Char nameP[256];
FileInfoType desc;
@@ -129,7 +128,7 @@
e = VFSFileOpen(gVars->VFS.volRefNum, _path.c_str(), vfsModeRead, &handle);
if (e)
- return myList;
+ return false;
while(dirIterator != expIteratorStop) {
e = VFSDirEntryEnumerate(handle, &dirIterator, &desc);
@@ -140,7 +139,7 @@
VFSFileClose(handle);
- return myList;
+ return true;
}
const char *lastPathComponent(const Common::String &str) {
Modified: scummvm/trunk/backends/fs/posix/posix-fs.cpp
===================================================================
--- scummvm/trunk/backends/fs/posix/posix-fs.cpp 2006-05-03 19:34:53 UTC (rev 22314)
+++ scummvm/trunk/backends/fs/posix/posix-fs.cpp 2006-05-03 20:43:26 UTC (rev 22315)
@@ -57,7 +57,7 @@
virtual bool isDirectory() const { return _isDirectory; }
virtual String path() const { return _path; }
- virtual AbstractFSList listDir(ListMode mode) const;
+ virtual bool listDir(AbstractFSList &list, ListMode mode) const;
virtual AbstractFilesystemNode *parent() const;
virtual AbstractFilesystemNode *child(const String &name) const;
};
@@ -136,15 +136,14 @@
}
}
-AbstractFSList POSIXFilesystemNode::listDir(ListMode mode) const {
+bool POSIXFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const {
assert(_isDirectory);
DIR *dirp = opendir(_path.c_str());
struct dirent *dp;
- AbstractFSList myList;
if (dirp == NULL)
- return myList;
+ return false;
// ... loop over dir entries using readdir
while ((dp = readdir(dirp)) != NULL) {
@@ -201,7 +200,7 @@
myList.push_back(new POSIXFilesystemNode(entry));
}
closedir(dirp);
- return myList;
+ return true;
}
AbstractFilesystemNode *POSIXFilesystemNode::parent() const {
Modified: scummvm/trunk/backends/fs/ps2/ps2-fs.cpp
===================================================================
--- scummvm/trunk/backends/fs/ps2/ps2-fs.cpp 2006-05-03 19:34:53 UTC (rev 22314)
+++ scummvm/trunk/backends/fs/ps2/ps2-fs.cpp 2006-05-03 20:43:26 UTC (rev 22315)
@@ -45,7 +45,7 @@
virtual bool isDirectory() const { return _isDirectory; }
virtual String path() const { return _path; }
- virtual AbstractFSList listDir(ListMode) const;
+ virtual bool listDir(AbstractFSList &list, ListMode mode) const;
virtual AbstractFilesystemNode *parent() const;
virtual AbstractFilesystemNode *child(const String &name) const;
@@ -79,11 +79,9 @@
_isDirectory = true;
}
-AbstractFSList Ps2FilesystemNode::listDir(ListMode mode) const {
+bool Ps2FilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const {
assert(_isDirectory);
- AbstractFSList myList;
-
struct TocEntry tocEntries[MAX_LIST_ENTRIES];
int files;
char listDir[512];
@@ -115,7 +113,7 @@
myList.push_back(new Ps2FilesystemNode(dirEntry));
}
}
- return myList;
+ return true;
}
AbstractFilesystemNode *Ps2FilesystemNode::parent() const {
Modified: scummvm/trunk/backends/fs/symbian/symbian-fs.cpp
===================================================================
--- scummvm/trunk/backends/fs/symbian/symbian-fs.cpp 2006-05-03 19:34:53 UTC (rev 22314)
+++ scummvm/trunk/backends/fs/symbian/symbian-fs.cpp 2006-05-03 20:43:26 UTC (rev 22315)
@@ -52,7 +52,7 @@
virtual bool isDirectory() const { return _isDirectory; }
virtual String path() const { return _path; }
- virtual AbstractFSList listDir(ListMode mode) const;
+ virtual bool listDir(AbstractFSList &list, ListMode mode) const;
virtual AbstractFilesystemNode *parent() const;
virtual AbstractFilesystemNode *child(const String &name) const;
};
@@ -105,9 +105,8 @@
_isDirectory = true;
}
-AbstractFSList SymbianFilesystemNode::listDir(ListMode mode) const {
+bool SymbianFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const {
assert(_isDirectory);
- AbstractFSList myList;
if (_isPseudoRoot) {
// Drives enumeration
@@ -179,7 +178,7 @@
}
}
- return myList;
+ return true;
}
AbstractFilesystemNode *SymbianFilesystemNode::parent() const {
Modified: scummvm/trunk/backends/fs/windows/windows-fs.cpp
===================================================================
--- scummvm/trunk/backends/fs/windows/windows-fs.cpp 2006-05-03 19:34:53 UTC (rev 22314)
+++ scummvm/trunk/backends/fs/windows/windows-fs.cpp 2006-05-03 20:43:26 UTC (rev 22315)
@@ -50,7 +50,7 @@
virtual bool isDirectory() const { return _isDirectory; }
virtual String path() const { return _path; }
- virtual AbstractFSList listDir(ListMode) const;
+ virtual bool listDir(AbstractFSList &list, ListMode mode) const;
virtual AbstractFilesystemNode *parent() const;
virtual AbstractFilesystemNode *child(const String &name) const;
@@ -163,11 +163,9 @@
_isPseudoRoot = false;
}
-AbstractFSList WindowsFilesystemNode::listDir(ListMode mode) const {
+bool WindowsFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const {
assert(_isDirectory);
- AbstractFSList myList;
-
if (_isPseudoRoot) {
#ifndef _WIN32_WCE
// Drives enumeration
@@ -200,7 +198,7 @@
handle = FindFirstFile(toUnicode(searchPath), &desc);
if (handle == INVALID_HANDLE_VALUE)
- return myList;
+ return false;
addFile(myList, mode, _path.c_str(), &desc);
while (FindNextFile(handle, &desc))
addFile(myList, mode, _path.c_str(), &desc);
@@ -208,7 +206,7 @@
FindClose(handle);
}
- return myList;
+ return true;
}
AbstractFilesystemNode *WindowsFilesystemNode::parent() const {
Modified: scummvm/trunk/base/main.cpp
===================================================================
--- scummvm/trunk/base/main.cpp 2006-05-03 19:34:53 UTC (rev 22314)
+++ scummvm/trunk/base/main.cpp 2006-05-03 20:43:26 UTC (rev 22315)
@@ -271,15 +271,13 @@
}
FilesystemNode dir(path);
-
- if (!dir.isValid() || !dir.isDirectory()) {
+ FSList files;
+ if (!dir.listDir(files, FilesystemNode::kListAll)) {
printf(" ... invalid path, skipping\n");
continue;
}
-
- FSList files = dir.listDir(FilesystemNode::kListAll);
- DetectedGameList candidates(PluginManager::instance().detectGames(files));
+ DetectedGameList candidates(PluginManager::instance().detectGames(files));
bool gameidDiffers = false;
for (DetectedGameList::iterator x = candidates.begin(); x != candidates.end(); ++x) {
gameidDiffers |= scumm_stricmp(gameid.c_str(), x->gameid.c_str());
Modified: scummvm/trunk/common/file.cpp
===================================================================
--- scummvm/trunk/common/file.cpp 2006-05-03 19:34:53 UTC (rev 22314)
+++ scummvm/trunk/common/file.cpp 2006-05-03 20:43:26 UTC (rev 22315)
@@ -124,27 +124,26 @@
if (level <= 0)
return;
- // Abort if this isn't a directory!
- if (!dir.isDirectory())
+ FSList fslist;
+ if (!dir.listDir(fslist, FilesystemNode::kListAll)) {
+ // Failed listing the contents of this node, so it is either not a
+ // directory, or just doesn't exist at all.
return;
-
- const String &directory(dir.path());
+ }
if (!_defaultDirectories)
_defaultDirectories = new StringIntMap;
// Do not add directories multiple times, unless this time they are added
// with a bigger depth.
+ const String &directory(dir.path());
if (_defaultDirectories->contains(directory) && (*_defaultDirectories)[directory] >= level)
return;
-
(*_defaultDirectories)[directory] = level;
if (!_filesMap)
_filesMap = new FilesMap;
- const FSList fslist(dir.listDir(FilesystemNode::kListAll));
-
for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) {
if (file->isDirectory()) {
addDefaultDirectoryRecursive(file->path(), level - 1);
Modified: scummvm/trunk/engines/scumm/plugin.cpp
===================================================================
--- scummvm/trunk/engines/scumm/plugin.cpp 2006-05-03 19:34:53 UTC (rev 22314)
+++ scummvm/trunk/engines/scumm/plugin.cpp 2006-05-03 20:43:26 UTC (rev 22315)
@@ -1318,14 +1318,18 @@
}
+ FSList fslist;
FilesystemNode dir;
if (ConfMan.hasKey("path") )
dir = FilesystemNode(ConfMan.get("path"));
- FSList fslist = dir.listDir(FilesystemNode::kListFilesOnly);
- Common::List<DetectorResult> results;
+ if (!dir.listDir(fslist, FilesystemNode::kListFilesOnly)) {
+ warning("ScummEngine: invalid game path '%s'", dir.path().c_str());
+ return kInvalidPathError;
+ }
// Invoke the detector, but fixed to the specified gameid.
+ Common::List<DetectorResult> results;
detectGames(fslist, results, gameid);
// Unable to locate game data
Modified: scummvm/trunk/engines/sword1/sword1.cpp
===================================================================
--- scummvm/trunk/engines/sword1/sword1.cpp 2006-05-03 19:34:53 UTC (rev 22314)
+++ scummvm/trunk/engines/sword1/sword1.cpp 2006-05-03 20:43:26 UTC (rev 22315)
@@ -90,8 +90,11 @@
filesFound[cnt] = true;
} else {
for (int cnt = 0; cnt < ARRAYSIZE(g_dirNames); cnt++)
- if (scumm_stricmp(file->displayName().c_str(), g_dirNames[cnt]) == 0)
- Sword1CheckDirectory(file->listDir(FilesystemNode::kListFilesOnly), filesFound);
+ if (scumm_stricmp(file->displayName().c_str(), g_dirNames[cnt]) == 0) {
+ FSList fslist2;
+ if (file->listDir(fslist2, FilesystemNode::kListFilesOnly))
+ Sword1CheckDirectory(fslist2, filesFound);
+ }
}
}
}
Modified: scummvm/trunk/gui/launcher.cpp
===================================================================
--- scummvm/trunk/gui/launcher.cpp 2006-05-03 19:34:53 UTC (rev 22314)
+++ scummvm/trunk/gui/launcher.cpp 2006-05-03 20:43:26 UTC (rev 22315)
@@ -576,7 +576,11 @@
if (_browser->runModal() > 0) {
// User made his choice...
FilesystemNode dir(_browser->getResult());
- FSList files = dir.listDir(FilesystemNode::kListAll);
+ FSList files;
+ if (!dir.listDir(files, FilesystemNode::kListAll)) {
+ error("browser returned a node that is not a directory: '%s'",
+ dir.path().c_str());
+ }
// ...so let's determine a list of candidates, games that
// could be contained in the specified directory.
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