diff --git a/nixide/src/errors/context.rs b/nixide/src/errors/context.rs index 5c13781..404eee5 100644 --- a/nixide/src/errors/context.rs +++ b/nixide/src/errors/context.rs @@ -271,7 +271,7 @@ impl ErrorContext { pub(super) fn get_nix_err_name(&self) -> Option { unsafe { // NOTE: an Err here only occurs when "Last error was not a nix error" - wrap::nix_string_callback!(|callback, userdata: *mut __UserData, ctx: &ErrorContext| { + wrap::nix_string_callback!(|callback, userdata: &mut __UserData, ctx: &ErrorContext| { sys::nix_err_name(ctx.as_ptr(), self.as_ptr(), Some(callback), userdata) }) .ok() @@ -316,7 +316,7 @@ impl ErrorContext { pub(super) fn get_nix_err_info_msg(&self) -> Option { unsafe { // NOTE: an Err here only occurs when "Last error was not a nix error" - wrap::nix_string_callback!(|callback, user_data, ctx| { + wrap::nix_string_callback!(|callback, user_data, ctx: &ErrorContext| { sys::nix_err_info_msg(ctx.as_ptr(), self.as_ptr(), Some(callback), user_data) }) .ok() diff --git a/nixide/src/util/wrap.rs b/nixide/src/util/wrap.rs index d4a2fcb..e4bdb4c 100644 --- a/nixide/src/util/wrap.rs +++ b/nixide/src/util/wrap.rs @@ -103,18 +103,17 @@ macro_rules! nix_callback { unsafe extern "C" fn __wrapper_callback( $($( $pre: $pre_ty, )*)? - $userdata: *mut ::std::ffi::c_void, + $userdata: &mut __UserData, $($( $post: $post_ty, )*)? ) { - let ud = unsafe { &mut *($userdata as *mut __UserData) }; - let stored_retval = &raw mut ud.retval; + let stored_retval = &raw mut $userdata.retval; let retval = unsafe { __captured_fn( $($( $pre, )*)? - ud, + $userdata, $($( $post, )*)? - ); + ) }; unsafe { @@ -122,29 +121,12 @@ macro_rules! nix_callback { }; } - // fn __captured_function( - // callback: unsafe extern "C" fn( - // $userdata: *mut ::std::ffi::c_void, - // $( - // $arg_name: $arg_type, - // )* - // ), - // state: *mut __UserData, - // ctx: &$crate::errors::ErrorContext, - // ) { - // $function(callback, state, ctx); - // } - let mut __ctx: $crate::errors::ErrorContext = $crate::errors::ErrorContext::new(); let mut __state: ::std::mem::MaybeUninit<__UserData> = ::std::mem::MaybeUninit::uninit(); - $function(__wrapper_callback, __state.as_mut_ptr(), &__ctx); + $function(__wrapper_callback, &mut __state, &__ctx); __ctx.pop().and_then(|_| unsafe { __state.assume_init().retval }) - - // add type annotations for compiler - // let __result: $ret = __ctx.pop().and_then(|_| unsafe { __state.assume_init().retval }); - // __result }}; } pub(crate) use nix_callback;