mirror of
https://github.com/encounter/lzokay-rs.git
synced 2025-10-21 08:25:47 +00:00
Fix first byte handling
This commit is contained in:
parent
45b071ec7f
commit
0f0eb3f63f
@ -42,21 +42,23 @@ pub fn decompress(src: &[u8], dst: &mut [u8]) -> Result<usize, Error> {
|
|||||||
let mut lblen: usize;
|
let mut lblen: usize;
|
||||||
let mut lbcur: usize;
|
let mut lbcur: usize;
|
||||||
|
|
||||||
let first = input_byte(src, &mut inp)?;
|
let mut inst = input_byte(src, &mut inp)?;
|
||||||
// The LZO bitstream reserves the first byte for literal priming. Codes >= 22
|
// The LZO bitstream reserves the first byte for literal priming. Codes >= 22
|
||||||
// copy a literal block immediately; 18..21 seed the literal countdown (`state`).
|
// copy a literal block immediately; 18..21 seed the literal countdown (`state`).
|
||||||
if first >= 22 {
|
if inst >= 22 {
|
||||||
let len = (first as usize) - 17;
|
let len = (inst as usize) - 17;
|
||||||
copy_slice(src, &mut inp, dst, &mut outp, len)?;
|
copy_slice(src, &mut inp, dst, &mut outp, len)?;
|
||||||
state = 4;
|
state = 4;
|
||||||
} else if first >= 18 {
|
} else if inst >= 18 {
|
||||||
nstate = (first as usize) - 17;
|
nstate = (inst as usize) - 17;
|
||||||
state = nstate;
|
state = nstate;
|
||||||
copy_slice(src, &mut inp, dst, &mut outp, nstate)?;
|
copy_slice(src, &mut inp, dst, &mut outp, nstate)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let inst = input_byte(src, &mut inp)?;
|
if inp > 1 || state > 0 {
|
||||||
|
inst = input_byte(src, &mut inp)?;
|
||||||
|
}
|
||||||
if inst & 0xC0 != 0 {
|
if inst & 0xC0 != 0 {
|
||||||
// [M2]
|
// [M2]
|
||||||
// 1 L L D D D S S (128..255)
|
// 1 L L D D D S S (128..255)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user