refact: remote printer, adapter dll, free data ptr (#11279)

Signed-off-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
fufesou 2025-03-28 21:58:46 +08:00 committed by GitHub
parent 4b14f86134
commit 23e70c0fd1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 15 additions and 8 deletions

@ -1 +1 @@
Subproject commit 9ede5d49f65b8c513fe613dbfea2daf7694cba3e
Subproject commit 81b932b7bfa2ff8bc60189625fd6538db2fa9ea1

View file

@ -1544,7 +1544,13 @@ impl<T: InvokeUiSession> Remote<T> {
job.modify_time();
err = job.job_error();
job_type = job.r#type;
printer_data = job.get_buf_data();
printer_data = match job.get_buf_data().await {
Ok(d) => d,
Err(e) => {
log::error!("Failed to get the printer data: {}", e);
None
}
};
}
match job_type {
fs::JobType::Generic => {
@ -1552,10 +1558,10 @@ impl<T: InvokeUiSession> Remote<T> {
}
fs::JobType::Printer => {
if let Some(err) = err {
log::error!("Received printer job failed, error {err}");
log::error!("Receive print job failed, error {err}");
} else {
log::info!(
"Received printer job done, data len: {:?}",
"Receive print job done, data len: {:?}",
printer_data.as_ref().map(|d| d.len()).unwrap_or(0)
);
#[cfg(target_os = "windows")]

View file

@ -17,6 +17,8 @@ pub type Uninit = fn();
// data: The raw prn data, xps format.
// data_len: The length of the raw prn data.
pub type GetPrnData = fn(dur_mills: u32, data: *mut *mut i8, data_len: *mut u32);
// Free the prn data allocated by GetPrnData().
pub type FreePrnData = fn(data: *mut i8);
macro_rules! make_lib_wrapper {
($($field:ident : $tp:ty),+) => {
@ -78,7 +80,8 @@ macro_rules! make_lib_wrapper {
make_lib_wrapper!(
init: Init,
uninit: Uninit,
get_prn_data: GetPrnData
get_prn_data: GetPrnData,
free_prn_data: FreePrnData
);
lazy_static::lazy_static! {
@ -135,9 +138,7 @@ fn get_prn_data(dur_mills: u32) -> ResultType<Vec<u8>> {
}
let bytes =
Vec::from(unsafe { std::slice::from_raw_parts(data as *const u8, data_len as usize) });
unsafe {
hbb_common::libc::free(data as *mut std::ffi::c_void);
}
lib_wrapper.free_prn_data.map(|f| f(data));
Ok(bytes)
} else {
bail!("Failed to load func get_prn_file");