diff options
author | Colin Snover | 2017-11-29 00:06:12 -0600 |
---|---|---|
committer | Eugene Sandulenko | 2018-01-31 17:58:01 +0100 |
commit | 9916b263831f20e5841275051a8ed014de1f24eb (patch) | |
tree | bcd69585fa26cfa3c93ab60c7c480433fe9746f9 /engines/scumm/imuse/imuse_part.cpp | |
parent | 157ee95f64380215c3e6b1fed53be99607479582 (diff) | |
download | scummvm-rg350-9916b263831f20e5841275051a8ed014de1f24eb.tar.gz scummvm-rg350-9916b263831f20e5841275051a8ed014de1f24eb.tar.bz2 scummvm-rg350-9916b263831f20e5841275051a8ed014de1f24eb.zip |
SCUMM: Replace UB-triggering serialization code with Common::Serializer
Fixes Trac#10342.
Diffstat (limited to 'engines/scumm/imuse/imuse_part.cpp')
-rw-r--r-- | engines/scumm/imuse/imuse_part.cpp | 54 |
1 files changed, 25 insertions, 29 deletions
diff --git a/engines/scumm/imuse/imuse_part.cpp b/engines/scumm/imuse/imuse_part.cpp index 937523d275..ca0eaa4630 100644 --- a/engines/scumm/imuse/imuse_part.cpp +++ b/engines/scumm/imuse/imuse_part.cpp @@ -66,48 +66,44 @@ Part::Part() { _unassigned_instrument = false; } -void Part::saveLoadWithSerializer(Serializer *ser) { - const SaveLoadEntry partEntries[] = { - MKLINE(Part, _pitchbend, sleInt16, VER(8)), - MKLINE(Part, _pitchbend_factor, sleUint8, VER(8)), - MKLINE(Part, _transpose, sleInt8, VER(8)), - MKLINE(Part, _vol, sleUint8, VER(8)), - MKLINE(Part, _detune, sleInt8, VER(8)), - MKLINE(Part, _pan, sleInt8, VER(8)), - MKLINE(Part, _on, sleUint8, VER(8)), - MKLINE(Part, _modwheel, sleUint8, VER(8)), - MKLINE(Part, _pedal, sleUint8, VER(8)), - MK_OBSOLETE(Part, _program, sleUint8, VER(8), VER(16)), - MKLINE(Part, _pri, sleUint8, VER(8)), - MKLINE(Part, _chan, sleUint8, VER(8)), - MKLINE(Part, _effect_level, sleUint8, VER(8)), - MKLINE(Part, _chorus, sleUint8, VER(8)), - MKLINE(Part, _percussion, sleUint8, VER(8)), - MKLINE(Part, _bank, sleUint8, VER(8)), - MKEND() - }; - +void Part::saveLoadWithSerializer(Common::Serializer &ser) { int num; - if (ser->isSaving()) { + if (ser.isSaving()) { num = (_next ? (_next - _se->_parts + 1) : 0); - ser->saveUint16(num); + ser.syncAsUint16LE(num); num = (_prev ? (_prev - _se->_parts + 1) : 0); - ser->saveUint16(num); + ser.syncAsUint16LE(num); num = (_player ? (_player - _se->_players + 1) : 0); - ser->saveUint16(num); + ser.syncAsUint16LE(num); } else { - num = ser->loadUint16(); + ser.syncAsUint16LE(num); _next = (num ? &_se->_parts[num - 1] : 0); - num = ser->loadUint16(); + ser.syncAsUint16LE(num); _prev = (num ? &_se->_parts[num - 1] : 0); - num = ser->loadUint16(); + ser.syncAsUint16LE(num); _player = (num ? &_se->_players[num - 1] : 0); } - ser->saveLoadEntries(this, partEntries); + + ser.syncAsSint16LE(_pitchbend, VER(8)); + ser.syncAsByte(_pitchbend_factor, VER(8)); + ser.syncAsSByte(_transpose, VER(8)); + ser.syncAsByte(_vol, VER(8)); + ser.syncAsSByte(_detune, VER(8)); + ser.syncAsSByte(_pan, VER(8)); + ser.syncAsByte(_on, VER(8)); + ser.syncAsByte(_modwheel, VER(8)); + ser.syncAsByte(_pedal, VER(8)); + ser.skip(1, VER(8), VER(16)); // _program + ser.syncAsByte(_pri, VER(8)); + ser.syncAsByte(_chan, VER(8)); + ser.syncAsByte(_effect_level, VER(8)); + ser.syncAsByte(_chorus, VER(8)); + ser.syncAsByte(_percussion, VER(8)); + ser.syncAsByte(_bank, VER(8)); } void Part::set_detune(int8 detune) { |