diff options
author | Colin Snover | 2017-11-07 22:53:19 -0600 |
---|---|---|
committer | Eugene Sandulenko | 2017-12-08 07:55:56 +0000 |
commit | 8e829371c9d12fc121e9edbd05d40a2f03166cf1 (patch) | |
tree | eac7643d790a606cbbf3fa1e6f1728ab0a5dca78 /engines/sky/compact.cpp | |
parent | 4c777a9afcd402adda3335e46eac6ffcd24205f0 (diff) | |
download | scummvm-rg350-8e829371c9d12fc121e9edbd05d40a2f03166cf1.tar.gz scummvm-rg350-8e829371c9d12fc121e9edbd05d40a2f03166cf1.tar.bz2 scummvm-rg350-8e829371c9d12fc121e9edbd05d40a2f03166cf1.zip |
SKY: Fix unaligned pointer dereferences
Dereferencing an unaligned pointer will cause a memory fault on
at least older ARM and SPARC architectures, and is warned about
starting in Clang 4.
Diffstat (limited to 'engines/sky/compact.cpp')
-rw-r--r-- | engines/sky/compact.cpp | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/engines/sky/compact.cpp b/engines/sky/compact.cpp index ab244c1f84..13ea300942 100644 --- a/engines/sky/compact.cpp +++ b/engines/sky/compact.cpp @@ -311,24 +311,47 @@ const char *SkyCompact::nameForType(uint16 type) { return _typeNames[type]; } -uint16 *SkyCompact::getSub(Compact *cpt, uint16 mode) { +uint16 SkyCompact::getSub(Compact *cpt, uint16 mode) { switch (mode) { case 0: - return &(cpt->baseSub); + return cpt->baseSub; case 2: - return &(cpt->baseSub_off); + return cpt->baseSub_off; case 4: - return &(cpt->actionSub); + return cpt->actionSub; case 6: - return &(cpt->actionSub_off); + return cpt->actionSub_off; case 8: - return &(cpt->getToSub); + return cpt->getToSub; case 10: - return &(cpt->getToSub_off); + return cpt->getToSub_off; case 12: - return &(cpt->extraSub); + return cpt->extraSub; case 14: - return &(cpt->extraSub_off); + return cpt->extraSub_off; + default: + error("Invalid Mode (%d)", mode); + } +} + +void SkyCompact::setSub(Compact *cpt, uint16 mode, uint16 value) { + switch (mode) { + case 0: + cpt->baseSub = value; + case 2: + cpt->baseSub_off = value; + case 4: + cpt->actionSub = value; + case 6: + cpt->actionSub_off = value; + case 8: + cpt->getToSub = value; + case 10: + cpt->getToSub_off = value; + case 12: + cpt->extraSub = value; + case 14: + cpt->extraSub_off = value; default: error("Invalid Mode (%d)", mode); } |