[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