1
0
mirror of https://github.com/alliedmodders/metamod-source.git synced 2025-02-20 13:54:14 +01:00

linux/gcc/32bit compatibility

--HG--
extra : convert_revision : svn%3Ac2935e3e-5518-0410-8daf-afa5dab7d4e3/trunk%4049
This commit is contained in:
Pavol Marko 2005-05-01 12:36:48 +00:00
parent 211535d433
commit 9fb8a3e891
13 changed files with 94 additions and 38 deletions

View File

@ -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 <memory.h> // 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

View File

@ -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 <memory.h> // 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

6
sourcehook/generate/generate Executable file
View File

@ -0,0 +1,6 @@
#/bin/sh
./shworker.bin iter $1 sourcehook.hxx sourcehook.h
./shworker.bin hopter $1 FastDelegate.hxx FastDelegate.h
cp *.h ..

BIN
sourcehook/generate/shworker.bin Executable file

Binary file not shown.

View File

@ -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

View File

@ -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<Y> *ptr, RetType(X::*mfp)(@Param%%|, @)const)
#undef SH_MAKE_EXECUTABLECLASS_BODY
#endif
// The pope is dead. -> :(
// The pope is dead. -> :(

View File

@ -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)

View File

@ -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<class Param1, class Param2> 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<class Param1, class Param2, class Param3> 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<class Param1, class Param2, class Param3, class Param4> 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<class Param1, class Param2, class Param3, class Param4, class Param5> 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<class Param1, class Param2, class Param3, class Param4, class Param5, class Param6> 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<class Param1, class Param2, class Param3, class Param4, class Param5, class Param6, class Param7> 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<class Param1, class Param2, class Param3, class Param4, class Param5, class Param6, class Param7, class Param8> 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<class Param1, class Param2, class Param3, class Param4, class Param5, class Param6, class Param7, class Param8, class Param9> 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<class Param1, class Param2, class Param3, class Param4, class Param5, class Param6, class Param7, class Param8, class Param9, class Param10> 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<class Param1, class Param2, class Param3, class Param4, class Param5, class Param6, class Param7, class Param8, class Param9, class Param10, class Param11> 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<class Param1, class Param2, class Param3, class Param4, class Param5, class Param6, class Param7, class Param8, class Param9, class Param10, class Param11, class Param12> 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<class Param1, class Param2, class Param3, class Param4, class Param5, class Param6, class Param7, class Param8, class Param9, class Param10, class Param11, class Param12, class Param13> 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<class Param1, class Param2, class Param3, class Param4, class Param5, class Param6, class Param7, class Param8, class Param9, class Param10, class Param11, class Param12, class Param13, class Param14> 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<class Param1, class Param2, class Param3, class Param4, class Param5, class Param6, class Param7, class Param8, class Param9, class Param10, class Param11, class Param12, class Param13, class Param14, class Param15> 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<class Param1, class Param2, class Param3, class Param4, class Param5, class Param6, class Param7, class Param8, class Param9, class Param10, class Param11, class Param12, class Param13, class Param14, class Param15, class Param16> 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<Y> *ptr, RetType(X::*mfp)(Param1, Param2, Param3,
#endif
// The pope is dead. -> :(

23
sourcehook/test/Makefile Normal file
View File

@ -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)

View File

@ -71,4 +71,5 @@ int main(int argc, char *argv[])
char x;
cin.read(&x, 1);
}
}

View File

@ -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;
}
}

View File

@ -106,4 +106,5 @@ bool TestVafmtAndOverload(std::string &error)
SH_RELEASE_CALLCLASS(cc);
return true;
}
}

View File

@ -1,6 +1,9 @@
#ifndef __TESTEVENTS_H__
#define __TESTEVENTS_H__
#include <typeinfo>
#include <stdarg.h>
namespace
{
@ -69,4 +72,5 @@ namespace
#define CHECK_STATES(mwah, myerr) if (!StatesOk mwah) { error=myerr; return false; }
#endif
#endif