aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra
diff options
context:
space:
mode:
authorJohannes Schickel2009-09-20 13:21:18 +0000
committerJohannes Schickel2009-09-20 13:21:18 +0000
commit46b3779ae5c35069f7a3e5ca5356e22f264a0f4a (patch)
tree63bf8ce26e9f33679a18a1f63dc75179a696f0a1 /engines/kyra
parent5d79d748a46a42e7fe4169645c066c3934d83385 (diff)
downloadscummvm-rg350-46b3779ae5c35069f7a3e5ca5356e22f264a0f4a.tar.gz
scummvm-rg350-46b3779ae5c35069f7a3e5ca5356e22f264a0f4a.tar.bz2
scummvm-rg350-46b3779ae5c35069f7a3e5ca5356e22f264a0f4a.zip
Fix bug in LoLEngine::decodeSjis.
svn-id: r44208
Diffstat (limited to 'engines/kyra')
-rw-r--r--engines/kyra/lol.cpp29
1 files changed, 11 insertions, 18 deletions
diff --git a/engines/kyra/lol.cpp b/engines/kyra/lol.cpp
index 449610d382..83c31b42f5 100644
--- a/engines/kyra/lol.cpp
+++ b/engines/kyra/lol.cpp
@@ -1060,29 +1060,22 @@ void LoLEngine::decodeSjis(const char *src, char *dst) {
char d[3];
s[1] = 0;
- uint8 cmd = *src++;
-
- while (cmd) {
+ uint8 cmd = 0;
+ while ((cmd = *src++) != 0) {
if (cmd == 27) {
- cmd = *src & 0x7f;
- src++;
-
- for (int i = 0; i < cmd; i ++) {
- *dst++ = *src++;
- *dst++ = *src++;
- }
- cmd = *src++;
-
+ cmd = *src++ & 0x7f;
+ memcpy(dst, src, cmd * 2);
+ dst += cmd * 2;
+ src += cmd * 2;
} else {
- s[0] = *src++;
- Util::decodeString1(s, d);
- *dst++ = d[0];
- cmd = *src++;
+ s[0] = cmd;
+ int size = Util::decodeString1(s, d);
+ memcpy(dst, d, size);
+ dst += size;
}
}
- if (!cmd)
- *dst = 0;
+ *dst = 0;
}
bool LoLEngine::addCharacter(int id) {