diff options
author | Willem Jan Palenstijn | 2013-12-31 13:42:58 +0100 |
---|---|---|
committer | Willem Jan Palenstijn | 2013-12-31 13:42:58 +0100 |
commit | f777e54df291d1f39aefdc40d1d966e50d261efb (patch) | |
tree | 939fe155e6bdf0d74f82f133536b6881054a2f7b | |
parent | 86dc8d052772ac65a7c9e63469b3fddadc3b2c42 (diff) | |
download | scummvm-rg350-f777e54df291d1f39aefdc40d1d966e50d261efb.tar.gz scummvm-rg350-f777e54df291d1f39aefdc40d1d966e50d261efb.tar.bz2 scummvm-rg350-f777e54df291d1f39aefdc40d1d966e50d261efb.zip |
SCI: Reduce indentation depth
-rw-r--r-- | engines/sci/resource_audio.cpp | 49 |
1 files changed, 26 insertions, 23 deletions
diff --git a/engines/sci/resource_audio.cpp b/engines/sci/resource_audio.cpp index 268180b531..16622e5f45 100644 --- a/engines/sci/resource_audio.cpp +++ b/engines/sci/resource_audio.cpp @@ -678,31 +678,34 @@ SoundResource::SoundResource(uint32 resourceNr, ResourceManager *resMan, SciVers channel = &_tracks[trackNr].channels[channelNr]; channel->prio = READ_LE_UINT16(data); uint dataOffset = READ_LE_UINT16(data + 2); - if (dataOffset < resource->size) { - channel->data = resource->data + dataOffset; - channel->size = READ_LE_UINT16(data + 4); - channel->curPos = 0; - // FIXME: number contains (low nibble) channel and (high nibble) flags - // 0x20 is set on rhythm channels to prevent remapping - channel->number = *channel->data; - channel->poly = *(channel->data + 1); - channel->time = channel->prev = 0; - channel->data += 2; // skip over header - channel->size -= 2; // remove header size - if (channel->number == 0xFE) { // Digital channel - _tracks[trackNr].digitalChannelNr = channelNr; - _tracks[trackNr].digitalSampleRate = READ_LE_UINT16(channel->data); - _tracks[trackNr].digitalSampleSize = READ_LE_UINT16(channel->data + 2); - _tracks[trackNr].digitalSampleStart = READ_LE_UINT16(channel->data + 4); - _tracks[trackNr].digitalSampleEnd = READ_LE_UINT16(channel->data + 6); - channel->data += 8; // Skip over header - channel->size -= 8; - } - _tracks[trackNr].channelCount++; - channelNr++; - } else { + + if (dataOffset >= resource->size) { warning("Invalid offset inside sound resource %d: track %d, channel %d", resourceNr, trackNr, channelNr); + data += 6; + continue; + } + + channel->data = resource->data + dataOffset; + channel->size = READ_LE_UINT16(data + 4); + channel->curPos = 0; + // FIXME: number contains (low nibble) channel and (high nibble) flags + // 0x20 is set on rhythm channels to prevent remapping + channel->number = *channel->data; + channel->poly = *(channel->data + 1); + channel->time = channel->prev = 0; + channel->data += 2; // skip over header + channel->size -= 2; // remove header size + if (channel->number == 0xFE) { // Digital channel + _tracks[trackNr].digitalChannelNr = channelNr; + _tracks[trackNr].digitalSampleRate = READ_LE_UINT16(channel->data); + _tracks[trackNr].digitalSampleSize = READ_LE_UINT16(channel->data + 2); + _tracks[trackNr].digitalSampleStart = READ_LE_UINT16(channel->data + 4); + _tracks[trackNr].digitalSampleEnd = READ_LE_UINT16(channel->data + 6); + channel->data += 8; // Skip over header + channel->size -= 8; } + _tracks[trackNr].channelCount++; + channelNr++; data += 6; } } else { |