[Scummvm-cvs-logs] SF.net SVN: scummvm: [30837] scummvm/trunk/engines/kyra

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Sat Feb 9 16:46:07 CET 2008


Revision: 30837
          http://scummvm.svn.sourceforge.net/scummvm/?rev=30837&view=rev
Author:   lordhoto
Date:     2008-02-09 07:46:06 -0800 (Sat, 09 Feb 2008)

Log Message:
-----------
Revised checking if files can be load.

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/resource.cpp
    scummvm/trunk/engines/kyra/resource.h

Modified: scummvm/trunk/engines/kyra/resource.cpp
===================================================================
--- scummvm/trunk/engines/kyra/resource.cpp	2008-02-09 15:33:04 UTC (rev 30836)
+++ scummvm/trunk/engines/kyra/resource.cpp	2008-02-09 15:46:06 UTC (rev 30837)
@@ -132,8 +132,10 @@
 	if (iter == _map.end())
 		return false;
 
-	if (iter->_value.preload)
+	if (iter->_value.preload) {
+		iter->_value.mounted = true;
 		return true;
+	}
 
 	const ResArchiveLoader *loader = getLoader(iter->_value.type);
 	if (!loader) {
@@ -141,20 +143,16 @@
 		return false;
 	}
 
-	iter->_value.loadable = true;
-
-	if (!isAccessable(filename)) {
-		iter->_value.loadable = false;
+	if (!isAccessable(filename))
 		return false;
-	}
 
 	Common::SeekableReadStream *stream = getFileStream(filename);
 	if (!stream) {
-		iter->_value.loadable = false;
 		error("archive file '%s' not found", filename.c_str());
 		return false;
 	}
 
+	iter->_value.mounted = true;
 	iter->_value.preload = true;
 	loader->loadFile(filename, *stream, _map);
 	delete stream;
@@ -211,7 +209,7 @@
 	ResFileMap::iterator iter = _map.find(filename);
 	if (iter != _map.end()) {
 		if (!iter->_value.prot)
-			iter->_value.loadable = false;
+			iter->_value.mounted = false;
 	}
 }
 
@@ -241,7 +239,7 @@
 			error("couldn't open file '%s'", file->getName().c_str());
 		entry.size = temp.size();
 		entry.offset = 0;
-		entry.loadable = true;
+		entry.mounted = false;
 		entry.preload = false;
 		entry.prot = false;
 		entry.type = ResFileEntry::kAutoDetect;
@@ -255,7 +253,7 @@
 			ResFileEntry entry;
 			entry.parent = "";
 			entry.size = temp.size();
-			entry.loadable = true;
+			entry.mounted = true;
 			entry.preload = false;
 			entry.prot = false;
 			entry.type = ResFileEntry::kAutoDetect;
@@ -339,17 +337,20 @@
 
 bool Resource::isAccessable(const Common::String &file) const {
 	ResFileMap::const_iterator iter = _map.find(file);
-	while (true) {
-		if (iter == _map.end())
-			break;
-
-		if (!iter->_value.loadable)
-			return false;
-
-		if (!iter->_value.parent.empty())
+	while (iter != _map.end()) {
+		if (!iter->_value.parent.empty()) {
 			iter = _map.find(iter->_value.parent);
-		else
-			return iter->_value.loadable;
+			if (iter != _map.end()) {
+				// parent can never be a non archive file
+				if (iter->_value.type == ResFileEntry::kRaw)
+					return false;
+				// not mounted parent means not accessable
+				else if (!iter->_value.mounted)
+					return false;
+			}
+		} else {
+			return true;
+		}
 	}
 	return false;
 }
@@ -370,7 +371,7 @@
 
 				if ((*l)->isLoadable(i->_key, *stream)) {
 					i->_value.type = (*l)->getType();
-					i->_value.loadable = false;
+					i->_value.mounted = false;
 					i->_value.preload = false;
 					break;
 				}
@@ -378,10 +379,8 @@
 			delete stream;
 			stream = 0;
 
-			if (i->_value.type == ResFileEntry::kAutoDetect) {
+			if (i->_value.type == ResFileEntry::kAutoDetect)
 				i->_value.type = ResFileEntry::kRaw;
-				i->_value.loadable = true;
-			}
 		}
 	}
 }
@@ -507,7 +506,7 @@
 			entry.offset = startoffset;
 			entry.parent = filename;
 			entry.type = ResFileEntry::kAutoDetect;
-			entry.loadable = true;
+			entry.mounted = false;
 			entry.prot = false;
 			entry.preload = false;
 
@@ -609,7 +608,7 @@
 		ResFileEntry entry;
 		entry.parent = filename;
 		entry.type = ResFileEntry::kAutoDetect;
-		entry.loadable = true;
+		entry.mounted = false;
 		entry.preload = false;
 		entry.prot = false;
 		entry.size = stream.readUint32LE();

Modified: scummvm/trunk/engines/kyra/resource.h
===================================================================
--- scummvm/trunk/engines/kyra/resource.h	2008-02-09 15:33:04 UTC (rev 30836)
+++ scummvm/trunk/engines/kyra/resource.h	2008-02-09 15:46:06 UTC (rev 30837)
@@ -44,7 +44,7 @@
 	uint32 size;
 
 	bool preload;
-	bool loadable;
+	bool mounted;
 	bool prot;
 
 	enum kType {


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