From a49eff49d1ff1db247e558cc64f39ec6ff7fe55a Mon Sep 17 00:00:00 2001 From: medigor Date: Wed, 7 Dec 2022 22:54:55 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D1=81=20MemoryManager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ffi.rs | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/ffi.rs b/src/ffi.rs index f249dbe..9f09169 100644 --- a/src/ffi.rs +++ b/src/ffi.rs @@ -37,6 +37,7 @@ pub struct Tm { pub struct ReturnValue<'a> { mem: &'a MemoryManager, variant: &'a mut TVariant, + result: &'a mut bool, } #[allow(dead_code)] @@ -66,6 +67,7 @@ impl<'a> ReturnValue<'a> { pub fn set_str(self, val: &[u16]) { let Some(data) = self.mem.alloc_memory::(val.len()) else { + *self.result = false; return; }; @@ -78,6 +80,7 @@ impl<'a> ReturnValue<'a> { pub fn set_blob(self, val: &[u8]) { let Some(data) = self.mem.alloc_memory::(val.len()) else { + *self.result = false; return; }; @@ -90,6 +93,7 @@ impl<'a> ReturnValue<'a> { pub fn alloc_str(self, len: usize) -> Option<&'a mut [u16]> { let Some(data) = self.mem.alloc_memory::(len) else { + *self.result = false; return None; }; @@ -102,6 +106,7 @@ impl<'a> ReturnValue<'a> { pub fn alloc_blob(self, len: usize) -> Option<&'a mut [u8]> { let Some(data) = self.mem.alloc_memory::(len) else { + *self.result = false; return None; }; @@ -385,8 +390,13 @@ unsafe extern "system" fn get_prop_val( return false; }; - let return_value = ReturnValue { mem, variant: val }; - component.addin.get_prop_val(num as usize, return_value) + let mut result = true; + let return_value = ReturnValue { + mem, + variant: val, + result: &mut result, + }; + component.addin.get_prop_val(num as usize, return_value) && result } unsafe extern "system" fn set_prop_val( @@ -466,11 +476,17 @@ unsafe extern "system" fn get_param_def_value( return false; }; - let return_value = ReturnValue { mem, variant: val }; + let mut result = true; + let return_value = ReturnValue { + mem, + variant: val, + result: &mut result, + }; component .addin .get_param_def_value(method_num as usize, param_num as usize, return_value) + && result } unsafe extern "system" fn has_ret_val( @@ -507,9 +523,11 @@ unsafe extern "system" fn call_as_func( return false; }; + let mut result = true; let return_value = ReturnValue { mem, variant: ret_value, + result: &mut result, }; let param_values = from_raw_parts(params, size_array as usize) @@ -520,6 +538,7 @@ unsafe extern "system" fn call_as_func( component .addin .call_as_func(method_num as usize, param_values.as_slice(), return_value) + && result } #[repr(C)]