mirror of
https://github.com/voided/CollisionHook.git
synced 2025-12-06 18:28:22 +00:00
Add platform-specific DETOUR macros for TF2 (Linux i386) and CSGO (Windows)
This PR introduces a new macro, DETOUR_CUSTOM_STATIC2, to unify detour declarations across different platforms and Source Engine versions, improving code readability. - Linux i386 (TF2) → uses __attribute__((regparm(2))) - Windows (CSGO) → uses __fastcall - All other platforms → falls back to standard DETOUR_DECL_STATIC2 By consolidating detour declarations into a single macro, code is easier to read, maintain, and less error-prone across different platforms and ABIs.
This commit is contained in:
parent
2a074a30f2
commit
6cf4b973b5
@ -39,13 +39,8 @@ IForward *g_pPassFwd = NULL;
|
||||
|
||||
int gSetCollisionSolverHookId, gShouldCollideHookId;
|
||||
|
||||
#if defined(__linux__) && defined(__i386__)
|
||||
CDetour* PassServerEntityFilterFuncDetour;
|
||||
__attribute__((regparm(2))) bool (*PassServerEntityFilterFunc_Actual)(const IHandleEntity*, const IHandleEntity*);
|
||||
__attribute__((regparm(2))) bool PassServerEntityFilterFunc(const IHandleEntity* pTouch, const IHandleEntity* pPass)
|
||||
#else
|
||||
DETOUR_DECL_STATIC2( PassServerEntityFilterFunc, bool, const IHandleEntity *, pTouch, const IHandleEntity *, pPass )
|
||||
#endif
|
||||
|
||||
DETOUR_CUSTOM_STATIC2( PassServerEntityFilterFunc, bool, const IHandleEntity *, pTouch, const IHandleEntity *, pPass )
|
||||
{
|
||||
if ( g_pPassFwd->GetFunctionCount() == 0 )
|
||||
return DETOUR_STATIC_CALL( PassServerEntityFilterFunc )( pTouch, pPass );
|
||||
|
||||
@ -107,5 +107,21 @@ inline const CBaseEntity *UTIL_EntityFromEntityHandle( const IHandleEntity *pCon
|
||||
return pUnk->GetBaseEntity();
|
||||
}
|
||||
|
||||
#define DETOUR_DECL_STATIC2_REGPARM(name, ret, p1type, p1name, p2type, p2name) \
|
||||
ret (*name##_Actual)(p1type, p2type) __attribute__((regparm(2))) = NULL; \
|
||||
ret name(p1type p1name, p2type p2name) __attribute__((regparm(2)))
|
||||
|
||||
#define DETOUR_DECL_STATIC2_FASTCALL(name, ret, p1type, p1name, p2type, p2name) \
|
||||
ret (__fastcall *name##_Actual)(p1type, p2type) = NULL; \
|
||||
ret __fastcall name(p1type p1name, p2type p2name)
|
||||
|
||||
|
||||
#if SOURCE_ENGINE == SE_TF2 && defined(PLATFORM_LINUX) && defined(__i386__)
|
||||
#define DETOUR_CUSTOM_STATIC2 DETOUR_DECL_STATIC2_REGPARM
|
||||
#elif SOURCE_ENGINE == SE_CSGO && defined(PLATFORM_WINDOWS)
|
||||
#define DETOUR_CUSTOM_STATIC2 DETOUR_DECL_STATIC2_FASTCALL
|
||||
#else
|
||||
#define DETOUR_CUSTOM_STATIC2 DETOUR_DECL_STATIC2
|
||||
#endif
|
||||
|
||||
#endif // _INCLUDE_COLLISIONHOOK_EXTENSION_H_
|
||||
|
||||
Loading…
Reference in New Issue
Block a user