#[repr(C)]pub struct FfiCodePtr(pub *mut c_void);
Expand description
Wraps a function pointer of unknown type.
This is used to make the API a bit easier to understand, and as a
simple type lint. As a repr(C)
struct of one element, it should
be safe to transmute between CodePtr
and *mut c_void
, or between
collections thereof.
Tuple Fields§
§0: *mut c_void
Implementations§
Source§impl CodePtr
impl CodePtr
Sourcepub fn from_fun(fun: unsafe extern "C" fn()) -> CodePtr
pub fn from_fun(fun: unsafe extern "C" fn()) -> CodePtr
Initializes a code pointer from a function pointer.
This is useful mainly for talking to C APIs that take untyped
callbacks specified in the API as having type void(*)()
.
Sourcepub fn from_ptr(fun: *const c_void) -> CodePtr
pub fn from_ptr(fun: *const c_void) -> CodePtr
Initializes a code pointer from a void pointer.
This is the other common type used in APIs (or at least in libffi) for untyped callback arguments.
Sourcepub fn as_fun(&self) -> &unsafe extern "C" fn()
pub fn as_fun(&self) -> &unsafe extern "C" fn()
Gets the code pointer typed as a C function pointer.
This is useful mainly for talking to C APIs that take untyped
callbacks specified in the API as having type void(*)()
.
§Safety
There is no checking that the returned type reflects the actual
parameter and return types of the function. Unless the C
function actually has type void(*)()
, it will need to be
cast before it is called.
Sourcepub unsafe fn as_safe_fun(&self) -> &extern "C" fn()
pub unsafe fn as_safe_fun(&self) -> &extern "C" fn()
Gets the code pointer typed as a “safe” C function pointer.
This is useful mainly for talking to C APIs that take untyped
callbacks specified in the API as having type void(*)()
.
§Safety
There isn’t necessarily anything actually safe about the resulting
function pointer—it’s up to the caller to know what they’re
doing within the unsafety boundary, or undefined behavior may
result. In particular,
there is no checking that the returned type reflects the actual
parameter and return types of the function. Unless the C
function actually has type void(*)()
, it will need to be
cast before it is called.
Sourcepub fn as_ptr(self) -> *const c_void
pub fn as_ptr(self) -> *const c_void
Gets the code pointer typed as a const void*
.
This is the other common type used in APIs (or at least in libffi) for untyped callback arguments.
Sourcepub fn as_mut_ptr(self) -> *mut c_void
pub fn as_mut_ptr(self) -> *mut c_void
Gets the code pointer typed as a void*
.
This is the other common type used in APIs (or at least in libffi) for untyped callback arguments.