scanner: make plugin interface ffi-safe with handle-based registry
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I8e4790db3cc29f84f4e0d7d8eff36c2c6a6a6964
This commit is contained in:
parent
4f9c7057ff
commit
f4961c7f95
9 changed files with 93 additions and 44 deletions
|
|
@ -12,7 +12,7 @@ pub fn scanner(name: TokenStream, input: TokenStream) -> TokenStream {
|
|||
|
||||
let result = quote! {
|
||||
#[no_mangle]
|
||||
pub extern "C" fn pscand_scanner() -> Box<dyn pscand_core::Scanner> {
|
||||
pub extern "C" fn pscand_scanner() -> *mut std::os::raw::c_void {
|
||||
struct ScannerImpl;
|
||||
|
||||
impl pscand_core::Scanner for ScannerImpl {
|
||||
|
|
@ -37,7 +37,8 @@ pub fn scanner(name: TokenStream, input: TokenStream) -> TokenStream {
|
|||
}
|
||||
}
|
||||
|
||||
Box::new(ScannerImpl)
|
||||
let handle = unsafe { pscand_core::register_scanner(Box::new(ScannerImpl)) };
|
||||
handle as *mut std::os::raw::c_void
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -53,8 +54,9 @@ pub fn register_scanner(input: TokenStream) -> TokenStream {
|
|||
#input
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn pscand_scanner() -> Box<dyn pscand_core::Scanner> {
|
||||
Box::new(#fn_name())
|
||||
pub extern "C" fn pscand_scanner() -> *mut std::os::raw::c_void {
|
||||
let handle = unsafe { pscand_core::register_scanner(Box::new(#fn_name())) };
|
||||
handle as *mut std::os::raw::c_void
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue