diff --git a/libs/clipboard/src/context_send.rs b/libs/clipboard/src/context_send.rs index 76f8e4d7a..a2053d852 100644 --- a/libs/clipboard/src/context_send.rs +++ b/libs/clipboard/src/context_send.rs @@ -57,15 +57,10 @@ impl ContextSend { } } - pub fn proc) -> u32>(f: F) -> u32 { + pub fn proc u32>(f: F) -> u32 { let lock = CONTEXT_SEND.addr.lock().unwrap(); if *lock != 0 { - unsafe { - let mut context = Box::from_raw(*lock as *mut CliprdrClientContext); - let code = f(&mut context); - std::mem::forget(context); - code - } + unsafe { f(&mut *(*lock as *mut CliprdrClientContext)) } } else { 0 } diff --git a/libs/clipboard/src/lib.rs b/libs/clipboard/src/lib.rs index fb20615d8..dc6892d61 100644 --- a/libs/clipboard/src/lib.rs +++ b/libs/clipboard/src/lib.rs @@ -164,12 +164,12 @@ fn send_data(conn_id: i32, data: ClipboardFile) { } } -pub fn empty_clipboard(context: &mut Box, conn_id: i32) -> bool { - unsafe { TRUE == cliprdr::empty_cliprdr(&mut (**context), conn_id as u32) } +pub fn empty_clipboard(context: &mut CliprdrClientContext, conn_id: i32) -> bool { + unsafe { TRUE == cliprdr::empty_cliprdr(context, conn_id as u32) } } pub fn server_clip_file( - context: &mut Box, + context: &mut CliprdrClientContext, conn_id: i32, msg: ClipboardFile, ) -> u32 { @@ -294,7 +294,7 @@ pub fn server_clip_file( ret } -pub fn server_monitor_ready(context: &mut Box, conn_id: i32) -> u32 { +pub fn server_monitor_ready(context: &mut CliprdrClientContext, conn_id: i32) -> u32 { unsafe { let monitor_ready = CLIPRDR_MONITOR_READY { connID: conn_id as UINT32, @@ -302,8 +302,8 @@ pub fn server_monitor_ready(context: &mut Box, conn_id: i3 msgFlags: 0 as UINT16, dataLen: 0 as UINT32, }; - if let Some(f) = (**context).MonitorReady { - let ret = f(&mut (**context), &monitor_ready); + if let Some(f) = context.MonitorReady { + let ret = f(context, &monitor_ready); ret as u32 } else { ERR_CODE_SERVER_FUNCTION_NONE @@ -312,7 +312,7 @@ pub fn server_monitor_ready(context: &mut Box, conn_id: i3 } pub fn server_format_list( - context: &mut Box, + context: &mut CliprdrClientContext, conn_id: i32, format_list: Vec<(i32, String)>, ) -> u32 { @@ -348,8 +348,8 @@ pub fn server_format_list( formats: formats.as_mut_ptr(), }; - let ret = if let Some(f) = (**context).ServerFormatList { - f(&mut (**context), &format_list) + let ret = if let Some(f) = context.ServerFormatList { + f(context, &format_list) } else { ERR_CODE_SERVER_FUNCTION_NONE }; @@ -366,7 +366,7 @@ pub fn server_format_list( } pub fn server_format_list_response( - context: &mut Box, + context: &mut CliprdrClientContext, conn_id: i32, msg_flags: i32, ) -> u32 { @@ -378,8 +378,8 @@ pub fn server_format_list_response( dataLen: 0 as UINT32, }; - if let Some(f) = (**context).ServerFormatListResponse { - f(&mut (**context), &format_list_response) + if let Some(f) = context.ServerFormatListResponse { + f(context, &format_list_response) } else { ERR_CODE_SERVER_FUNCTION_NONE } @@ -387,7 +387,7 @@ pub fn server_format_list_response( } pub fn server_format_data_request( - context: &mut Box, + context: &mut CliprdrClientContext, conn_id: i32, requested_format_id: i32, ) -> u32 { @@ -399,8 +399,8 @@ pub fn server_format_data_request( dataLen: 0 as UINT32, requestedFormatId: requested_format_id as UINT32, }; - if let Some(f) = (**context).ServerFormatDataRequest { - f(&mut (**context), &format_data_request) + if let Some(f) = context.ServerFormatDataRequest { + f(context, &format_data_request) } else { ERR_CODE_SERVER_FUNCTION_NONE } @@ -408,7 +408,7 @@ pub fn server_format_data_request( } pub fn server_format_data_response( - context: &mut Box, + context: &mut CliprdrClientContext, conn_id: i32, msg_flags: i32, mut format_data: Vec, @@ -421,8 +421,8 @@ pub fn server_format_data_response( dataLen: format_data.len() as UINT32, requestedFormatData: format_data.as_mut_ptr(), }; - if let Some(f) = (**context).ServerFormatDataResponse { - f(&mut (**context), &format_data_response) + if let Some(f) = context.ServerFormatDataResponse { + f(context, &format_data_response) } else { ERR_CODE_SERVER_FUNCTION_NONE } @@ -430,7 +430,7 @@ pub fn server_format_data_response( } pub fn server_file_contents_request( - context: &mut Box, + context: &mut CliprdrClientContext, conn_id: i32, stream_id: i32, list_index: i32, @@ -456,8 +456,8 @@ pub fn server_file_contents_request( haveClipDataId: if have_clip_data_id { TRUE } else { FALSE }, clipDataId: clip_data_id as UINT32, }; - if let Some(f) = (**context).ServerFileContentsRequest { - f(&mut (**context), &file_contents_request) + if let Some(f) = context.ServerFileContentsRequest { + f(context, &file_contents_request) } else { ERR_CODE_SERVER_FUNCTION_NONE } @@ -465,7 +465,7 @@ pub fn server_file_contents_request( } pub fn server_file_contents_response( - context: &mut Box, + context: &mut CliprdrClientContext, conn_id: i32, msg_flags: i32, stream_id: i32, @@ -481,8 +481,8 @@ pub fn server_file_contents_response( cbRequested: requested_data.len() as UINT32, requestedData: requested_data.as_mut_ptr(), }; - if let Some(f) = (**context).ServerFileContentsResponse { - f(&mut (**context), &file_contents_response) + if let Some(f) = context.ServerFileContentsResponse { + f(context, &file_contents_response) } else { ERR_CODE_SERVER_FUNCTION_NONE } diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 15ce93c32..82c3794bb 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -251,7 +251,7 @@ impl Remote { #[cfg(windows)] { let conn_id = self.client_conn_id; - ContextSend::proc(|context: &mut Box| -> u32 { + ContextSend::proc(|context: &mut CliprdrClientContext| -> u32 { empty_clipboard(context, conn_id); 0 }); @@ -1624,7 +1624,7 @@ impl Remote { "Process clipboard message from server peer, stop: {}, is_stopping_allowed: {}, file_transfer_enabled: {}", stop, is_stopping_allowed, file_transfer_enabled); if !stop { - ContextSend::proc(|context: &mut Box| -> u32 { + ContextSend::proc(|context: &mut CliprdrClientContext| -> u32 { clipboard::server_clip_file(context, self.client_conn_id, clip) }); } diff --git a/src/ui_cm_interface.rs b/src/ui_cm_interface.rs index 78949b0b5..29828d6b7 100644 --- a/src/ui_cm_interface.rs +++ b/src/ui_cm_interface.rs @@ -184,7 +184,7 @@ impl ConnectionManager { #[cfg(windows)] { - ContextSend::proc(|context: &mut Box| -> u32 { + ContextSend::proc(|context: &mut CliprdrClientContext| -> u32 { empty_clipboard(context, id); 0 }); @@ -427,7 +427,7 @@ impl IpcTaskRunner { continue; } let conn_id = self.conn_id; - ContextSend::proc(|context: &mut Box| -> u32 { + ContextSend::proc(|context: &mut CliprdrClientContext| -> u32 { clipboard::server_clip_file(context, conn_id, _clip) }); }