From 152853ed2c15784f9efb888c11919b46fb811e3b Mon Sep 17 00:00:00 2001 From: Numbers Date: Thu, 15 May 2025 15:22:16 +0200 Subject: [PATCH] allow getting the function pointer / lazy import struct --- src/lazy_importer.rs | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/lazy_importer.rs b/src/lazy_importer.rs index 1eeb41b..c212388 100644 --- a/src/lazy_importer.rs +++ b/src/lazy_importer.rs @@ -21,29 +21,39 @@ pub use make_seed; #[macro_export] macro_rules! link { ($library:literal $abi:literal $($link_name:literal)? fn $fname:ident ($($name:ident : $arg:ty),*)) => ( + + #[allow(non_snake_case)] + pub mod $fname { + pub const SEED: u64 = $crate::lazy_importer::make_seed!(); + pub static IMPORT: $crate::lazy_importer::LazyImport< + { $crate::lazy_importer::hash_utf8::($library.as_bytes()) }, + { $crate::lazy_importer::hash_utf8::(stringify!($fname).as_bytes()) }, + SEED, () + > = $crate::lazy_importer::LazyImport::new(); + } + #[inline(always)] #[allow(non_snake_case)] pub fn $fname ($($name: $arg),*) { - const SEED: u64 = $crate::lazy_importer::make_seed!(); - static LI: $crate::lazy_importer::LazyImport< - { $crate::lazy_importer::hash_utf8::($library.as_bytes()) }, - { $crate::lazy_importer::hash_utf8::(stringify!($fname).as_bytes()) }, - SEED, () - > = $crate::lazy_importer::LazyImport::new(); - unsafe { core::mem::transmute::<_,extern $abi fn($($arg),*)>(LI.resolve())($($name),*) } + unsafe { core::mem::transmute::<_,extern $abi fn($($arg),*)>($fname::IMPORT.resolve())($($name),*) } } ); ($library:literal $abi:literal $($link_name:literal)? fn $fname:ident ($($name:ident : $arg:ty),*) -> $ret:ty) => ( - #[inline(always)] + #[allow(non_snake_case)] - pub fn $fname ($($name: $arg),*) -> $ret { - const SEED: u64 = $crate::lazy_importer::make_seed!(); - static LI: $crate::lazy_importer::LazyImport< + pub mod $fname { + pub const SEED: u64 = $crate::lazy_importer::make_seed!(); + pub static IMPORT: $crate::lazy_importer::LazyImport< { $crate::lazy_importer::hash_utf8::($library.as_bytes()) }, { $crate::lazy_importer::hash_utf8::(stringify!($fname).as_bytes()) }, SEED, () > = $crate::lazy_importer::LazyImport::new(); - unsafe { core::mem::transmute::<_,extern $abi fn($($arg),*) -> $ret>(LI.resolve())($($name),*) } + } + + #[inline(always)] + #[allow(non_snake_case)] + pub fn $fname ($($name: $arg),*) -> $ret { + unsafe { core::mem::transmute::<_,extern $abi fn($($arg),*) -> $ret>($fname::IMPORT.resolve())($($name),*) } } ) }