Reexport utility macros, remove unclear and annoying macros
This commit is contained in:
parent
0148e6df88
commit
3d824932dd
|
@ -20,6 +20,12 @@ version = "1.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cfg_table"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "49f3690291e34881a89ceb8e80802f1582f29b1361fd476eeefb4e89dd6a121e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cstr"
|
name = "cstr"
|
||||||
version = "0.2.8"
|
version = "0.2.8"
|
||||||
|
@ -56,6 +62,28 @@ dependencies = [
|
||||||
"slice-pool",
|
"slice-pool",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fn_abi"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c8242bb800f5a67e61e17a2035b68596a1481fd5541187cd7f7392d8238482ac"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fn_type_alias"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "809e807f01217f1f89959fbeebd10c6471b5ef3971fce1b02a70fb7212cc6c1f"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "generic-array"
|
name = "generic-array"
|
||||||
version = "0.14.4"
|
version = "0.14.4"
|
||||||
|
@ -68,14 +96,18 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gmod"
|
name = "gmod"
|
||||||
version = "2.0.1"
|
version = "3.0.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"cfg_table",
|
||||||
"cstr",
|
"cstr",
|
||||||
"ctor",
|
"ctor",
|
||||||
"detour",
|
"detour",
|
||||||
|
"fn_abi",
|
||||||
|
"fn_type_alias",
|
||||||
"gmod-macros",
|
"gmod-macros",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"libloading",
|
"libloading",
|
||||||
|
"null_fn",
|
||||||
"skidscan",
|
"skidscan",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -150,6 +182,17 @@ dependencies = [
|
||||||
"winapi 0.2.8",
|
"winapi 0.2.8",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "null_fn"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4934ec63b88f0415c46aedf2ab6c753d2d2e354e847c17e03515658207243b9c"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro-crate"
|
name = "proc-macro-crate"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
|
@ -225,9 +268,9 @@ checksum = "733fc6e5f1bd3a8136f842c9bdea4e5f17c910c2fcc98c90c3aa7604ef5e2e7a"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.76"
|
version = "1.0.77"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c6f107db402c2c2055242dbf4d2af0e69197202e9faacbef9571bbe47f5a1b84"
|
checksum = "5239bc68e0fef57495900cfea4e8dc75596d9a319d7e16b1e0a440d24e6fe0a0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "gmod"
|
name = "gmod"
|
||||||
version = "2.0.1"
|
version = "3.0.0"
|
||||||
authors = ["William Venner <william@venner.io>"]
|
authors = ["William Venner <william@venner.io>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
@ -17,3 +17,8 @@ cstr = "0"
|
||||||
lazy_static = "1"
|
lazy_static = "1"
|
||||||
ctor = "0"
|
ctor = "0"
|
||||||
gmod-macros = { version = "0.1.0", path = "../gmod-macros" }
|
gmod-macros = { version = "0.1.0", path = "../gmod-macros" }
|
||||||
|
|
||||||
|
fn_type_alias = "0"
|
||||||
|
fn_abi = "0"
|
||||||
|
cfg_table = "0"
|
||||||
|
null_fn = "0"
|
||||||
|
|
117
gmod/src/hax.rs
117
gmod/src/hax.rs
|
@ -1,120 +1,3 @@
|
||||||
#[macro_export]
|
|
||||||
/// Common pattern for detouring.
|
|
||||||
macro_rules! __vtable_offset {
|
|
||||||
($name:ident = {
|
|
||||||
win64: $win64:literal,
|
|
||||||
win32: $win32:literal,
|
|
||||||
|
|
||||||
linux64: $linux64:literal,
|
|
||||||
linux32: $linux32:literal
|
|
||||||
}) => {
|
|
||||||
#[cfg(all(target_os = "windows", target_pointer_width = "64"))]
|
|
||||||
pub const $name: usize = $win64;
|
|
||||||
|
|
||||||
#[cfg(all(target_os = "windows", target_pointer_width = "32"))]
|
|
||||||
pub const $name: usize = $win32;
|
|
||||||
|
|
||||||
#[cfg(all(target_os = "linux", target_pointer_width = "64"))]
|
|
||||||
pub const $name: usize = $linux64;
|
|
||||||
|
|
||||||
#[cfg(all(target_os = "linux", target_pointer_width = "32"))]
|
|
||||||
pub const $name: usize = $linux32;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#[macro_export]
|
|
||||||
/// Common pattern for detouring.
|
|
||||||
/// # Example
|
|
||||||
/// ```norun
|
|
||||||
/// __callingconv_func! {
|
|
||||||
/// #[win32 = "stdcall"]
|
|
||||||
/// #[win64 = "stdcall"]
|
|
||||||
/// #[linux32 = "C"]
|
|
||||||
/// #[linux64 = "C"]
|
|
||||||
/// CVoiceGameMgrHelper_CanPlayerHearPlayer = extern fn(listener: *mut c_void, talker: *mut c_void) -> bool {
|
|
||||||
/// println!("listener {:?} talker {:?}", listener, talker);
|
|
||||||
/// false
|
|
||||||
/// }
|
|
||||||
/// }
|
|
||||||
/// ```
|
|
||||||
macro_rules! __callingconv_func {
|
|
||||||
{ @callingconv $ty:ident = $vis:vis extern $callingconv:tt fn $fn_ident:ident($($ident:ident: $arg:ty),*) $(-> $rtn:ty)? $code:block } => {
|
|
||||||
$vis type $ty = extern $callingconv fn($($ident: $arg),*) $(-> $rtn)?;
|
|
||||||
$vis extern $callingconv fn $fn_ident($($ident: $arg),*) $(-> $rtn)? $code
|
|
||||||
};
|
|
||||||
|
|
||||||
{ @callingconv $ty:ident = $vis:vis extern $callingconv:tt fn($($ident:ident: $arg:ty),*) $(-> $rtn:ty)? } => {
|
|
||||||
$vis type $ty = extern $callingconv fn($($ident: $arg),*) $(-> $rtn)?;
|
|
||||||
};
|
|
||||||
|
|
||||||
{ #[win32 = $win32:tt] #[win64 = $win64:tt] #[linux32 = $linux32:tt] #[linux64 = $linux64:tt] $ty:ident = $vis:vis extern fn $($fn_ident:ident)?($($ident:ident: $arg:ty),*) $(-> $rtn:ty)? $code:block } => {
|
|
||||||
#[cfg(all(target_os = "windows", target_pointer_width = "32"))]
|
|
||||||
$crate::__callingconv_func! { @callingconv $ty = $vis extern $win32 fn $($fn_ident)?($($ident: $arg),*) $(-> $rtn)? $code }
|
|
||||||
|
|
||||||
#[cfg(all(target_os = "windows", target_pointer_width = "64"))]
|
|
||||||
$crate::__callingconv_func! { @callingconv $ty = $vis extern $win64 fn $($fn_ident)?($($ident: $arg),*) $(-> $rtn)? $code }
|
|
||||||
|
|
||||||
#[cfg(all(target_os = "linux", target_pointer_width = "32"))]
|
|
||||||
$crate::__callingconv_func! { @callingconv $ty = $vis extern $linux32 fn $($fn_ident)?($($ident: $arg),*) $(-> $rtn)? $code }
|
|
||||||
|
|
||||||
#[cfg(all(target_os = "linux", target_pointer_width = "64"))]
|
|
||||||
$crate::__callingconv_func! { @callingconv $ty = $vis extern $linux64 fn $($fn_ident)?($($ident: $arg),*) $(-> $rtn)? $code }
|
|
||||||
};
|
|
||||||
|
|
||||||
{ #[win32 = $win32:tt] #[win64 = $win64:tt] #[linux32 = $linux32:tt] #[linux64 = $linux64:tt] $ty:ident = $vis:vis extern fn $($fn_ident:ident)?($($ident:ident: $arg:ty),*) $(-> $rtn:ty)? } => {
|
|
||||||
#[cfg(all(target_os = "windows", target_pointer_width = "32"))]
|
|
||||||
$crate::__callingconv_func! { @callingconv $ty = $vis extern $win32 fn $($fn_ident)?($($ident: $arg),*) $(-> $rtn)? }
|
|
||||||
|
|
||||||
#[cfg(all(target_os = "windows", target_pointer_width = "64"))]
|
|
||||||
$crate::__callingconv_func! { @callingconv $ty = $vis extern $win64 fn $($fn_ident)?($($ident: $arg),*) $(-> $rtn)? }
|
|
||||||
|
|
||||||
#[cfg(all(target_os = "linux", target_pointer_width = "32"))]
|
|
||||||
$crate::__callingconv_func! { @callingconv $ty = $vis extern $linux32 fn $($fn_ident)?($($ident: $arg),*) $(-> $rtn)? }
|
|
||||||
|
|
||||||
#[cfg(all(target_os = "linux", target_pointer_width = "64"))]
|
|
||||||
$crate::__callingconv_func! { @callingconv $ty = $vis extern $linux64 fn $($fn_ident)?($($ident: $arg),*) $(-> $rtn)? }
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#[macro_export]
|
|
||||||
/// Common pattern for detouring.
|
|
||||||
macro_rules! __gmod_func {
|
|
||||||
($ty:ident = extern fn($($ident:ident: $arg:ty),*) $(-> $rtn:ty)?) => {
|
|
||||||
#[cfg(target_pointer_width = "64")]
|
|
||||||
pub type $ty = extern "fastcall" fn($($ident: $arg),*) $(-> $rtn)?;
|
|
||||||
|
|
||||||
#[cfg(all(target_os = "windows", target_pointer_width = "32"))]
|
|
||||||
pub type $ty = extern "thiscall" fn($($ident: $arg),*) $(-> $rtn)?;
|
|
||||||
|
|
||||||
#[cfg(all(target_os = "linux", target_pointer_width = "32"))]
|
|
||||||
pub type $ty = extern "C" fn($($ident: $arg),*) $(-> $rtn)?;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[macro_export]
|
|
||||||
/// Common pattern for detouring.
|
|
||||||
macro_rules! __hook_func {
|
|
||||||
($ty:ident = extern fn $fn:ident($($ident:ident: $arg:ty),*) $(-> $rtn:ty)? $code:block) => {
|
|
||||||
#[cfg(target_pointer_width = "64")]
|
|
||||||
type $ty = extern "fastcall" fn($($ident: $arg),*) $(-> $rtn)?;
|
|
||||||
|
|
||||||
#[cfg(all(target_os = "windows", target_pointer_width = "32"))]
|
|
||||||
type $ty = extern "thiscall" fn($($ident: $arg),*) $(-> $rtn)?;
|
|
||||||
|
|
||||||
#[cfg(all(target_os = "linux", target_pointer_width = "32"))]
|
|
||||||
type $ty = extern "C" fn($($ident: $arg),*) $(-> $rtn)?;
|
|
||||||
|
|
||||||
#[cfg(target_pointer_width = "64")]
|
|
||||||
extern "fastcall" fn $fn($($ident: $arg),*) $(-> $rtn)? $code
|
|
||||||
|
|
||||||
#[cfg(all(target_os = "windows", target_pointer_width = "32"))]
|
|
||||||
extern "thiscall" fn $fn($($ident: $arg),*) $(-> $rtn)? $code
|
|
||||||
|
|
||||||
#[cfg(all(target_os = "linux", target_pointer_width = "32"))]
|
|
||||||
extern "C" fn $fn($($ident: $arg),*) $(-> $rtn)? $code
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
/// Common pattern for detouring.
|
/// Common pattern for detouring.
|
||||||
macro_rules! find_gmod_signature {
|
macro_rules! find_gmod_signature {
|
||||||
|
|
|
@ -7,6 +7,12 @@ pub use cstr;
|
||||||
pub use ctor::{ctor as dllopen, dtor as dllclose};
|
pub use ctor::{ctor as dllopen, dtor as dllclose};
|
||||||
pub use gmod_macros::*;
|
pub use gmod_macros::*;
|
||||||
|
|
||||||
|
// Reexport common macros
|
||||||
|
pub use fn_type_alias::*;
|
||||||
|
pub use fn_abi::*;
|
||||||
|
pub use cfg_table::*;
|
||||||
|
pub use null_fn::*;
|
||||||
|
|
||||||
/// Lua interface
|
/// Lua interface
|
||||||
pub mod lua;
|
pub mod lua;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue