Add buffered lzo decompress

This commit is contained in:
drmortalwombat 2024-06-12 21:07:58 +02:00
parent 02b28096af
commit d7a2b98b4d
2 changed files with 47 additions and 0 deletions

View File

@ -86,3 +86,46 @@ const char * oscar_expand_rle(char * dp, const char * sp)
return sp + 1; return sp + 1;
} }
__native const char * oscar_expand_lzo_buf(char * dp, const char * sp)
{
char buf[256];
char b = 0;
char cmd = sp[0];
do
{
if (cmd & 0x80)
{
char i = b - sp[1];
cmd &= 0x7f;
sp += 2;
char n = 0;
do {
buf[b] = dp[n] = buf[i];
b++;
i++;
n++;
} while (n != cmd);
}
else
{
sp += 1;
char n = 0;
do {
buf[b] = dp[n] = sp[n];
b++;
n++;
} while (n != cmd);
sp += cmd;
}
dp += cmd;
cmd = sp[0];
} while (cmd);
return sp + 1;
}

View File

@ -6,6 +6,10 @@ __native const char * oscar_expand_lzo(char * dp, const char * sp);
__native const char * oscar_expand_rle(char * dp, const char * sp); __native const char * oscar_expand_rle(char * dp, const char * sp);
// Same as oscar_expand_lzo, but does not need read access to the
// target memory area. On the downside, it uses 256 bytes of stack
// memory as buffer
__native const char * oscar_expand_lzo_buf(char * dp, const char * sp);
#pragma compile("oscar.c") #pragma compile("oscar.c")