diff options
author | Johannes Schickel | 2009-09-20 13:21:18 +0000 |
---|---|---|
committer | Johannes Schickel | 2009-09-20 13:21:18 +0000 |
commit | 46b3779ae5c35069f7a3e5ca5356e22f264a0f4a (patch) | |
tree | 63bf8ce26e9f33679a18a1f63dc75179a696f0a1 /engines/kyra | |
parent | 5d79d748a46a42e7fe4169645c066c3934d83385 (diff) | |
download | scummvm-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.cpp | 29 |
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) { |