DETECTOR: Allow detecting with MacBinary with no resource fork

This commit is contained in:
Vladimir Serbinenko 2022-10-27 03:18:09 +02:00 committed by Eugene Sandulenko
parent 2e4744f013
commit 98f178c58f
2 changed files with 22 additions and 6 deletions

View File

@ -133,7 +133,7 @@ bool MacResManager::hasDataFork() const {
}
bool MacResManager::hasResFork() const {
return !_baseFileName.empty() && _mode != kResForkNone;
return !_baseFileName.empty() && _mode != kResForkNone && _resForkSize != 0;
}
uint32 MacResManager::getResForkDataSize() const {
@ -446,13 +446,15 @@ bool MacResManager::loadFromMacBinary(SeekableReadStream *stream) {
_resForkOffset = MBI_INFOHDR + dataSizePad;
_resForkSize = rsrcSize;
}
if (_resForkOffset < 0)
return false;
_mode = kResForkMacBinary;
return load(stream);
}
if (_resForkOffset < 0)
return false;
_mode = kResForkMacBinary;
return load(stream);
return false;
}
bool MacResManager::loadFromRawFork(SeekableReadStream *stream) {
@ -472,6 +474,11 @@ bool MacResManager::load(SeekableReadStream *stream) {
if (_mode == kResForkNone)
return false;
if (_resForkSize == 0) {
_stream = stream;
return true;
}
stream->seek(_resForkOffset);
_dataOffset = stream->readUint32BE() + _resForkOffset;

View File

@ -557,6 +557,15 @@ static bool getFilePropertiesIntern(uint md5Bytes, const AdvancedMetaEngine::Fil
if (fileProps.size != 0)
return true;
Common::SeekableReadStream *dataFork = macResMan.getDataFork();
if (dataFork && dataFork->size()) {
fileProps.size = dataFork->size();
fileProps.md5 = Common::computeStreamMD5AsString(*dataFork, md5Bytes);
delete dataFork;
return true;
}
delete dataFork;
}
if (!allFiles.contains(fname))