diff --git a/sourcehook/FastDelegate.h b/sourcehook/FastDelegate.h index eed5442..1eaae68 100644 --- a/sourcehook/FastDelegate.h +++ b/sourcehook/FastDelegate.h @@ -41,9 +41,12 @@ #ifndef FASTDELEGATE_H #define FASTDELEGATE_H -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 + +#ifdef _MSC_VER +# if _MSC_VER > 1000 +# pragma once +# endif // _MSC_VER > 1000 +#endif // #ifdef _MSC_VER #include // to allow <,> comparisons @@ -614,7 +617,7 @@ public: return right.IsLess(*this); } DelegateMemento (const DelegateMemento &right) : - m_pFunction(right.m_pFunction), m_pthis(right.m_pthis) + m_pthis(right.m_pthis), m_pFunction(right.m_pFunction) #if !defined(FASTDELEGATE_USESTATICFUNCTIONHACK) , m_pStaticFunction (right.m_pStaticFunction) #endif diff --git a/sourcehook/generate/FastDelegate.hxx b/sourcehook/generate/FastDelegate.hxx index e0c7882..7611a0c 100644 --- a/sourcehook/generate/FastDelegate.hxx +++ b/sourcehook/generate/FastDelegate.hxx @@ -41,9 +41,12 @@ #ifndef FASTDELEGATE_H #define FASTDELEGATE_H -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 + +#ifdef _MSC_VER +# if _MSC_VER > 1000 +# pragma once +# endif // _MSC_VER > 1000 +#endif // #ifdef _MSC_VER #include // to allow <,> comparisons @@ -614,7 +617,7 @@ public: return right.IsLess(*this); } DelegateMemento (const DelegateMemento &right) : - m_pFunction(right.m_pFunction), m_pthis(right.m_pthis) + m_pthis(right.m_pthis), m_pFunction(right.m_pFunction) #if !defined(FASTDELEGATE_USESTATICFUNCTIONHACK) , m_pStaticFunction (right.m_pStaticFunction) #endif diff --git a/sourcehook/generate/generate b/sourcehook/generate/generate new file mode 100755 index 0000000..5dc9e0f --- /dev/null +++ b/sourcehook/generate/generate @@ -0,0 +1,6 @@ +#/bin/sh + +./shworker.bin iter $1 sourcehook.hxx sourcehook.h +./shworker.bin hopter $1 FastDelegate.hxx FastDelegate.h + +cp *.h .. diff --git a/sourcehook/generate/shworker.bin b/sourcehook/generate/shworker.bin new file mode 100755 index 0000000..768a4d3 Binary files /dev/null and b/sourcehook/generate/shworker.bin differ diff --git a/sourcehook/generate/shworker/Makefile b/sourcehook/generate/shworker/Makefile index f3f5ac1..9897c3c 100644 --- a/sourcehook/generate/shworker/Makefile +++ b/sourcehook/generate/shworker/Makefile @@ -3,13 +3,13 @@ default: shworker bin: mkdir bin -fd_hopter.o: fd_hopter.cpp +fd_hopter.o: fd_hopter.cpp bin gcc -fPIC -o bin/$@ -c $< -main.o: main.cpp +main.o: main.cpp bin gcc -fPIC -o bin/$@ -c $< -shworker: fd_hopter.o main.o - gcc -ldl -lstdc++ bin/fd_hopter.o bin/main.o -o bin/shworker +shworker: fd_hopter.o main.o bin + gcc -ldl -lstdc++ bin/fd_hopter.o bin/main.o -o bin/shworker.bin diff --git a/sourcehook/generate/sourcehook.hxx b/sourcehook/generate/sourcehook.hxx index 1b2cd8a..7be4bc2 100755 --- a/sourcehook/generate/sourcehook.hxx +++ b/sourcehook/generate/sourcehook.hxx @@ -20,7 +20,13 @@ #define SH_GLOB_PLUGPTR g_PLID #endif -#define SH_ASSERT(x, info) if (!(x)) __asm { int 3 } +#ifdef SH_DEBUG +# define SH_ASSERT__(x, info, file, line, func) \ + ((printf("SOURCEHOOK DEBUG ASSERTION FAILED:\n %s:%u(%s): %s\n", file, line, func, info), true) ? (abort(), 0) : 0) +# define SH_ASSERT(x, info) if (!(x)) SH_ASSERT__(x, info, __FILE__, __LINE__, __FUNCTION__) +#else +# define SH_ASSERT(x, info) +#endif // System #define SH_SYS_WIN32 1 @@ -67,7 +73,7 @@ enum META_RES MRES_IGNORED=0, // plugin didn't take any action MRES_HANDLED, // plugin did something, but real function should still be called MRES_OVERRIDE, // call real function, but use my return value - MRES_SUPERCEDE, // skip real function; use my return value + MRES_SUPERCEDE // skip real function; use my return value }; @@ -671,7 +677,7 @@ namespace SourceHook @VARARGS@ // Support for @$@ arguments @template<@@class Param%%|, @@> @RetType operator()(@Param%% p%%|, @) const - SH_MAKE_EXECUTABLECLASS_OB((@p%%@), (@Param%%@)) + SH_MAKE_EXECUTABLECLASS_OB((@p%%|, @), (@Param%%|, @)) @ENDARGS@ }; @@ -698,4 +704,4 @@ SH_CALL(SourceHook::CallClass *ptr, RetType(X::*mfp)(@Param%%|, @)const) #undef SH_MAKE_EXECUTABLECLASS_BODY #endif - // The pope is dead. -> :( \ No newline at end of file + // The pope is dead. -> :( diff --git a/sourcehook/sourcehook.cpp b/sourcehook/sourcehook.cpp index a86eebf..e5375d0 100644 --- a/sourcehook/sourcehook.cpp +++ b/sourcehook/sourcehook.cpp @@ -401,7 +401,8 @@ namespace SourceHook CSourceHookImpl::HookManInfoList::iterator CSourceHookImpl::FindHookMan(HookManInfoList::iterator begin, HookManInfoList::iterator end, const char *proto, int vtblofs, int vtblidx) { - for (HookManInfoList::iterator hookmaniter = m_HookMans.begin(); hookmaniter != m_HookMans.end(); ++hookmaniter) + HookManInfoList::iterator hookmaniter; + for (hookmaniter = m_HookMans.begin(); hookmaniter != m_HookMans.end(); ++hookmaniter) { if (strcmp(hookmaniter->proto, proto) == 0 && hookmaniter->vtbl_offs == vtblofs && hookmaniter->vtbl_idx == vtblidx) diff --git a/sourcehook/sourcehook.h b/sourcehook/sourcehook.h index 94bfbb8..f019bb3 100644 --- a/sourcehook/sourcehook.h +++ b/sourcehook/sourcehook.h @@ -20,7 +20,13 @@ #define SH_GLOB_PLUGPTR g_PLID #endif -#define SH_ASSERT(x, info) if (!(x)) __asm { int 3 } +#ifdef SH_DEBUG +# define SH_ASSERT__(x, info, file, line, func) \ + ((printf("SOURCEHOOK DEBUG ASSERTION FAILED:\n %s:%u(%s): %s\n", file, line, func, info), true) ? (abort(), 0) : 0) +# define SH_ASSERT(x, info) if (!(x)) SH_ASSERT__(x, info, __FILE__, __LINE__, __FUNCTION__) +#else +# define SH_ASSERT(x, info) +#endif // System #define SH_SYS_WIN32 1 @@ -67,7 +73,7 @@ enum META_RES MRES_IGNORED=0, // plugin didn't take any action MRES_HANDLED, // plugin did something, but real function should still be called MRES_OVERRIDE, // call real function, but use my return value - MRES_SUPERCEDE, // skip real function; use my return value + MRES_SUPERCEDE // skip real function; use my return value }; @@ -1492,63 +1498,63 @@ namespace SourceHook // Support for 2 arguments template RetType operator()(Param1 p1, Param2 p2) const - SH_MAKE_EXECUTABLECLASS_OB((p1p2), (Param1Param2)) + SH_MAKE_EXECUTABLECLASS_OB((p1, p2), (Param1, Param2)) // Support for 3 arguments template RetType operator()(Param1 p1, Param2 p2, Param3 p3) const - SH_MAKE_EXECUTABLECLASS_OB((p1p2p3), (Param1Param2Param3)) + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3), (Param1, Param2, Param3)) // Support for 4 arguments template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4) const - SH_MAKE_EXECUTABLECLASS_OB((p1p2p3p4), (Param1Param2Param3Param4)) + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4), (Param1, Param2, Param3, Param4)) // Support for 5 arguments template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5) const - SH_MAKE_EXECUTABLECLASS_OB((p1p2p3p4p5), (Param1Param2Param3Param4Param5)) + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5), (Param1, Param2, Param3, Param4, Param5)) // Support for 6 arguments template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6) const - SH_MAKE_EXECUTABLECLASS_OB((p1p2p3p4p5p6), (Param1Param2Param3Param4Param5Param6)) + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6), (Param1, Param2, Param3, Param4, Param5, Param6)) // Support for 7 arguments template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) const - SH_MAKE_EXECUTABLECLASS_OB((p1p2p3p4p5p6p7), (Param1Param2Param3Param4Param5Param6Param7)) + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7), (Param1, Param2, Param3, Param4, Param5, Param6, Param7)) // Support for 8 arguments template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const - SH_MAKE_EXECUTABLECLASS_OB((p1p2p3p4p5p6p7p8), (Param1Param2Param3Param4Param5Param6Param7Param8)) + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) // Support for 9 arguments template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const - SH_MAKE_EXECUTABLECLASS_OB((p1p2p3p4p5p6p7p8p9), (Param1Param2Param3Param4Param5Param6Param7Param8Param9)) + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) // Support for 10 arguments template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const - SH_MAKE_EXECUTABLECLASS_OB((p1p2p3p4p5p6p7p8p9p10), (Param1Param2Param3Param4Param5Param6Param7Param8Param9Param10)) + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) // Support for 11 arguments template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const - SH_MAKE_EXECUTABLECLASS_OB((p1p2p3p4p5p6p7p8p9p10p11), (Param1Param2Param3Param4Param5Param6Param7Param8Param9Param10Param11)) + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) // Support for 12 arguments template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const - SH_MAKE_EXECUTABLECLASS_OB((p1p2p3p4p5p6p7p8p9p10p11p12), (Param1Param2Param3Param4Param5Param6Param7Param8Param9Param10Param11Param12)) + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) // Support for 13 arguments template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const - SH_MAKE_EXECUTABLECLASS_OB((p1p2p3p4p5p6p7p8p9p10p11p12p13), (Param1Param2Param3Param4Param5Param6Param7Param8Param9Param10Param11Param12Param13)) + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) // Support for 14 arguments template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const - SH_MAKE_EXECUTABLECLASS_OB((p1p2p3p4p5p6p7p8p9p10p11p12p13p14), (Param1Param2Param3Param4Param5Param6Param7Param8Param9Param10Param11Param12Param13Param14)) + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) // Support for 15 arguments template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const - SH_MAKE_EXECUTABLECLASS_OB((p1p2p3p4p5p6p7p8p9p10p11p12p13p14p15), (Param1Param2Param3Param4Param5Param6Param7Param8Param9Param10Param11Param12Param13Param14Param15)) + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) // Support for 16 arguments template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const - SH_MAKE_EXECUTABLECLASS_OB((p1p2p3p4p5p6p7p8p9p10p11p12p13p14p15p16), (Param1Param2Param3Param4Param5Param6Param7Param8Param9Param10Param11Param12Param13Param14Param15Param16)) + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) }; } @@ -1813,3 +1819,4 @@ SH_CALL(SourceHook::CallClass *ptr, RetType(X::*mfp)(Param1, Param2, Param3, #endif // The pope is dead. -> :( + diff --git a/sourcehook/test/Makefile b/sourcehook/test/Makefile new file mode 100644 index 0000000..0cd9705 --- /dev/null +++ b/sourcehook/test/Makefile @@ -0,0 +1,23 @@ +CC=gcc +CCFLAGS=-c -I.. -DSH_DEBUG + +test.bin: bin bin/main.o bin/test1.o bin/test2.o bin/sourcehook.o + $(CC) bin/main.o bin/test1.o bin/test2.o bin/sourcehook.o -lstdc++ -o test.bin + +bin: + mkdir bin + +bin/main.o: main.cpp ../sourcehook.h + $(CC) $(CCFLAGS) -o bin/main.o main.cpp + +bin/test1.o: test1.cpp ../sourcehook.h + $(CC) $(CCFLAGS) -o bin/test1.o test1.cpp + +bin/test2.o: test2.cpp ../sourcehook.h + $(CC) $(CCFLAGS) -o bin/test2.o test2.cpp + +bin/sourcehook.o: ../sourcehook.cpp ../sourcehook.h + $(CC) $(CCFLAGS) -o bin/sourcehook.o ../sourcehook.cpp + +../sourcehook.h: ../generate/sourcehook.hxx + (cd ../generate; ./generate 16) diff --git a/sourcehook/test/main.cpp b/sourcehook/test/main.cpp index 858774b..e92d6ce 100644 --- a/sourcehook/test/main.cpp +++ b/sourcehook/test/main.cpp @@ -71,4 +71,5 @@ int main(int argc, char *argv[]) char x; cin.read(&x, 1); -} \ No newline at end of file +} + diff --git a/sourcehook/test/test1.cpp b/sourcehook/test/test1.cpp index 9553963..3cc634d 100644 --- a/sourcehook/test/test1.cpp +++ b/sourcehook/test/test1.cpp @@ -733,4 +733,5 @@ bool TestBasic(std::string &error) SH_REMOVE_HOOK_MEMFUNC(Test, F9, pTest, &f1_handlers, &HandlersF1::Pre, false); SH_REMOVE_HOOK_MEMFUNC(Test, F10, pTest, &f1_handlers, &HandlersF1::Pre, false); return true; -} \ No newline at end of file +} + diff --git a/sourcehook/test/test2.cpp b/sourcehook/test/test2.cpp index b6ce823..af84987 100644 --- a/sourcehook/test/test2.cpp +++ b/sourcehook/test/test2.cpp @@ -106,4 +106,5 @@ bool TestVafmtAndOverload(std::string &error) SH_RELEASE_CALLCLASS(cc); return true; -} \ No newline at end of file +} + diff --git a/sourcehook/test/testevents.h b/sourcehook/test/testevents.h index 00cbef3..781b899 100644 --- a/sourcehook/test/testevents.h +++ b/sourcehook/test/testevents.h @@ -1,6 +1,9 @@ #ifndef __TESTEVENTS_H__ #define __TESTEVENTS_H__ +#include +#include + namespace { @@ -69,4 +72,5 @@ namespace #define CHECK_STATES(mwah, myerr) if (!StatesOk mwah) { error=myerr; return false; } -#endif \ No newline at end of file +#endif +