[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