mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-03-07 20:30:08 +03:00
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();
|
job.modify_time();
|
||||||
err = job.job_error();
|
err = job.job_error();
|
||||||
job_type = job.r#type;
|
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 {
|
match job_type {
|
||||||
fs::JobType::Generic => {
|
fs::JobType::Generic => {
|
||||||
@@ -1552,10 +1558,10 @@ impl<T: InvokeUiSession> Remote<T> {
|
|||||||
}
|
}
|
||||||
fs::JobType::Printer => {
|
fs::JobType::Printer => {
|
||||||
if let Some(err) = err {
|
if let Some(err) = err {
|
||||||
log::error!("Received printer job failed, error {err}");
|
log::error!("Receive print job failed, error {err}");
|
||||||
} else {
|
} else {
|
||||||
log::info!(
|
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)
|
printer_data.as_ref().map(|d| d.len()).unwrap_or(0)
|
||||||
);
|
);
|
||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ pub type Uninit = fn();
|
|||||||
// data: The raw prn data, xps format.
|
// data: The raw prn data, xps format.
|
||||||
// data_len: The length of the raw prn data.
|
// data_len: The length of the raw prn data.
|
||||||
pub type GetPrnData = fn(dur_mills: u32, data: *mut *mut i8, data_len: *mut u32);
|
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 {
|
macro_rules! make_lib_wrapper {
|
||||||
($($field:ident : $tp:ty),+) => {
|
($($field:ident : $tp:ty),+) => {
|
||||||
@@ -78,7 +80,8 @@ macro_rules! make_lib_wrapper {
|
|||||||
make_lib_wrapper!(
|
make_lib_wrapper!(
|
||||||
init: Init,
|
init: Init,
|
||||||
uninit: Uninit,
|
uninit: Uninit,
|
||||||
get_prn_data: GetPrnData
|
get_prn_data: GetPrnData,
|
||||||
|
free_prn_data: FreePrnData
|
||||||
);
|
);
|
||||||
|
|
||||||
lazy_static::lazy_static! {
|
lazy_static::lazy_static! {
|
||||||
@@ -135,9 +138,7 @@ fn get_prn_data(dur_mills: u32) -> ResultType<Vec<u8>> {
|
|||||||
}
|
}
|
||||||
let bytes =
|
let bytes =
|
||||||
Vec::from(unsafe { std::slice::from_raw_parts(data as *const u8, data_len as usize) });
|
Vec::from(unsafe { std::slice::from_raw_parts(data as *const u8, data_len as usize) });
|
||||||
unsafe {
|
lib_wrapper.free_prn_data.map(|f| f(data));
|
||||||
hbb_common::libc::free(data as *mut std::ffi::c_void);
|
|
||||||
}
|
|
||||||
Ok(bytes)
|
Ok(bytes)
|
||||||
} else {
|
} else {
|
||||||
bail!("Failed to load func get_prn_file");
|
bail!("Failed to load func get_prn_file");
|
||||||
|
|||||||
Reference in New Issue
Block a user