6s32 GetExpandSize(
const u8 *src) {
7 if (src[0] ==
'Y' && src[1] ==
'a' && src[2] ==
'z') {
8 return form<s32>(&src[4]);
17s32 DecodeSZS(
const u8 *src, u8 *dst) {
18 s32 expandSize = GetExpandSize(src);
24 for (s32 destIdx = 0; destIdx < expandSize; code >>= 1) {
32 dst[destIdx++] = src[srcIdx++];
37 s32 distToDest = (src[srcIdx] << 8) | src[srcIdx + 1];
38 srcIdx +=
sizeof(u8) * 2;
39 s32 runSrcIdx = destIdx - (distToDest & 0xfff);
42 s32 runLen = ((distToDest >> 12) == 0) ? src[srcIdx++] + 0x12 : (distToDest >> 12) + 2;
44 for (; runLen > 0; runLen--, destIdx++, runSrcIdx++) {
45 if (destIdx >= expandSize) {
46 PANIC(
"Malformed compressed SZS data.");
49 dst[destIdx] = dst[runSrcIdx - 1];