mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-02-23 21:02:23 +00:00
fix(core/rust): fix uzlib window allocation
[no changelog]
This commit is contained in:
parent
dd823097b4
commit
837988f61e
@ -13,25 +13,25 @@ impl Default for ffi::uzlib_uncomp {
|
||||
pub struct UzlibContext<'a> {
|
||||
uncomp: ffi::uzlib_uncomp,
|
||||
src_data: PhantomData<&'a [u8]>,
|
||||
window: Option<[u8; UZLIB_WINDOW_SIZE]>,
|
||||
}
|
||||
|
||||
impl<'a> UzlibContext<'a> {
|
||||
pub fn new(src: &'a [u8], use_window: bool) -> Self {
|
||||
let window = use_window.then_some([0_u8; UZLIB_WINDOW_SIZE]);
|
||||
|
||||
pub fn new(src: &'a [u8], window: Option<&'a mut [u8; UZLIB_WINDOW_SIZE]>) -> Self {
|
||||
let mut ctx = Self {
|
||||
uncomp: uzlib_uncomp::default(),
|
||||
src_data: Default::default(),
|
||||
window,
|
||||
};
|
||||
|
||||
unsafe {
|
||||
ctx.uncomp.source = src.as_ptr();
|
||||
ctx.uncomp.source_limit = src.as_ptr().add(src.len());
|
||||
|
||||
if let Some(w) = ctx.window {
|
||||
ffi::uzlib_uncompress_init(&mut ctx.uncomp, w.as_ptr() as _, w.len() as u32);
|
||||
if let Some(w) = window {
|
||||
ffi::uzlib_uncompress_init(
|
||||
&mut ctx.uncomp,
|
||||
w.as_mut_ptr() as _,
|
||||
UZLIB_WINDOW_SIZE as u32,
|
||||
);
|
||||
} else {
|
||||
ffi::uzlib_uncompress_init(&mut ctx.uncomp, ptr::null_mut(), 0);
|
||||
}
|
||||
|
@ -1,14 +1,18 @@
|
||||
use super::constant;
|
||||
use super::{
|
||||
constant,
|
||||
geometry::{Offset, Point, Rect},
|
||||
};
|
||||
use crate::{
|
||||
error::Error,
|
||||
time::Duration,
|
||||
trezorhal::{display, qr, time, uzlib},
|
||||
trezorhal::{
|
||||
display, qr, time,
|
||||
uzlib::{UzlibContext, UZLIB_WINDOW_SIZE},
|
||||
},
|
||||
ui::lerp::Lerp,
|
||||
};
|
||||
use core::slice;
|
||||
|
||||
use super::geometry::{Offset, Point, Rect};
|
||||
|
||||
pub fn backlight() -> i32 {
|
||||
display::backlight(-1)
|
||||
}
|
||||
@ -110,7 +114,9 @@ pub fn icon_rust(center: Point, data: &[u8], fg_color: Color, bg_color: Color) {
|
||||
set_window(clamped);
|
||||
|
||||
let mut dest = [0_u8; 1];
|
||||
let mut ctx = uzlib::UzlibContext::new(&data[12..], true);
|
||||
|
||||
let mut window = [0; UZLIB_WINDOW_SIZE];
|
||||
let mut ctx = UzlibContext::new(&data[12..], Some(&mut window));
|
||||
|
||||
for py in area.y0..area.y1 {
|
||||
for px in area.x0..area.x1 {
|
||||
@ -317,7 +323,7 @@ pub fn rect_rounded2_partial(
|
||||
);
|
||||
icon_area_clamped = icon_area.clamp(constant::screen());
|
||||
|
||||
let mut ctx = uzlib::UzlibContext::new(&icon_bytes[12..], false);
|
||||
let mut ctx = UzlibContext::new(&icon_bytes[12..], None);
|
||||
unwrap!(ctx.uncompress(&mut icon_data), "Decompression failed");
|
||||
icon_colortable = get_color_table(icon_color, bg_color);
|
||||
icon_width = toif_info.width.into();
|
||||
|
Loading…
Reference in New Issue
Block a user