refact: remote printer, adapter dll, free data ptr (#11279)
Signed-off-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
Submodule libs/hbb_common updated: 9ede5d49f6...81b932b7bf
@@ -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")]
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user