parent
684f950509
commit
dbc12b6fb5
|
@ -34,15 +34,31 @@ bool detour_del(detour_data_t* d);
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/* Declare the type for the original function */
|
/* Declare the type for the original function */
|
||||||
#define DECL_DETOUR_TYPE(funcRet, funcName, ...) \
|
#define DECL_DETOUR_TYPE(funcRet, newTypeName, ...) \
|
||||||
typedef funcRet (*funcName##_t)(__VA_ARGS__);
|
typedef funcRet (*newTypeName##_t)(__VA_ARGS__);
|
||||||
|
|
||||||
/* Reset original bytes, call original, detour again. detourData is NOT a ptr */
|
/* Reset original bytes, call original, detour again.
|
||||||
#define CALL_ORIGINAL(detourData, funcName, ...) \
|
* Keep in mind that:
|
||||||
|
* - The returned value of the original function is not stored. If the
|
||||||
|
* function is not void, and you care about the return value, use
|
||||||
|
* GET_ORIGINAL() instead.
|
||||||
|
* - detourData is NOT a pointer, it expects the full struct
|
||||||
|
* - funcType should be the same name passed to DECL_DETOUR_TYPE, without the
|
||||||
|
* ending added by the macro ("_t") */
|
||||||
|
#define CALL_ORIGINAL(detourData, funcType, ...) \
|
||||||
{ \
|
{ \
|
||||||
detour_del(&detourData); \
|
detour_del(&detourData); \
|
||||||
((funcName##_t)detourData.orig)(__VA_ARGS__); \
|
((funcType##_t)detourData.orig)(__VA_ARGS__); \
|
||||||
detour_add(&detourData); \
|
detour_add(&detourData); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Same as CALL_ORIGINAL, but accepts an extra parameter for storing the
|
||||||
|
* returned value of the original function */
|
||||||
|
#define GET_ORIGINAL(detourData, returnVar, funcType, ...) \
|
||||||
|
{ \
|
||||||
|
detour_del(&detourData); \
|
||||||
|
returnVar = ((funcType##_t)detourData.orig)(__VA_ARGS__); \
|
||||||
|
detour_add(&detourData); \
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* DETOUR_H_ */
|
#endif /* DETOUR_H_ */
|
||||||
|
|
Loading…
Reference in New Issue