extern "C" {
fn decompress_lzo(compressed: *const u8, compressed_len: u32, decompressed: *mut u8, decompressed_len: *mut u32) -> i32;
}
pub fn decompress_lzo_wrapper(compressed_data: &[u8]) -> Result<Vec<u8>, &'static str> {
let mut decompressed_data = vec![0u8; compressed_data.len() * 10]; let mut decompressed_len = decompressed_data.len() as u32;
let result = unsafe {
decompress_lzo(
compressed_data.as_ptr(),
compressed_data.len() as u32,
decompressed_data.as_mut_ptr(),
&mut decompressed_len,
)
};
if result != 0 {
Err("Decompression failed")
} else {
decompressed_data.truncate(decompressed_len as usize);
Ok(decompressed_data)
}
}