From 71dc85d35a66883b76e71bf69f810302870f7990 Mon Sep 17 00:00:00 2001 From: Warmist Date: Mon, 8 Aug 2011 22:17:11 +0300 Subject: [PATCH] Linux compatibilty run, not sure if windows is not broken... --- plugins/CMakeLists.txt | 4 +-- plugins/Dfusion/include/lua_VersionInfo.h | 1 + plugins/Dfusion/include/lune.h | 2 +- plugins/Dfusion/src/functioncall.cpp | 32 ++++++++++++++--------- plugins/Dfusion/src/lua_Hexsearch.cpp | 4 +-- plugins/Dfusion/src/lua_Offsets.cpp | 8 +++--- 6 files changed, 30 insertions(+), 21 deletions(-) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index fd6e07daf..70f082c48 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -98,9 +98,9 @@ ENDMACRO(DFHACK_PLUGIN) #RECURSE_DIRS() -# Dfusion plugin (Windows only right now) +# Dfusion plugin OPTION(BUILD_DFUSION "Build DFusion." ON) -if(NOT UNIX AND BUILD_DFUSION) +if(BUILD_DFUSION) add_subdirectory (Dfusion) endif() diff --git a/plugins/Dfusion/include/lua_VersionInfo.h b/plugins/Dfusion/include/lua_VersionInfo.h index cd46bd2a3..e45e34a21 100644 --- a/plugins/Dfusion/include/lua_VersionInfo.h +++ b/plugins/Dfusion/include/lua_VersionInfo.h @@ -1,5 +1,6 @@ #ifndef LUA_VERSIONINFO_H #define LUA_VERSIONINFO_H +#include #include namespace lua diff --git a/plugins/Dfusion/include/lune.h b/plugins/Dfusion/include/lune.h index 9acd80cc2..631ba169b 100644 --- a/plugins/Dfusion/include/lune.h +++ b/plugins/Dfusion/include/lune.h @@ -249,7 +249,7 @@ private: static int index_T(lua_State *L) // calls with (table, key), return value { lua::state st(L); - string key=st.as(-1); + std::string key=st.as(-1); T *p=check(L,1); GetTable(L,p); st.insert(-2); diff --git a/plugins/Dfusion/src/functioncall.cpp b/plugins/Dfusion/src/functioncall.cpp index f95a644d8..b6c38c928 100644 --- a/plugins/Dfusion/src/functioncall.cpp +++ b/plugins/Dfusion/src/functioncall.cpp @@ -1,5 +1,11 @@ #include "functioncall.h" -#define __F_TDEF(CONV,CONV_,tag) typedef int(CONV_ *F_TYPE##CONV##tag) + +#ifdef LINUX_BUILD +#define __F_TDEF(CONV,CONV_,tag) typedef int(__attribute__ ( (CONV_) ) *F_TYPE##CONV##tag) +#else +#define __F_TDEF(CONV,CONV_,tag) typedef int(__ ## CONV_ *F_TYPE##CONV##tag) +#endif + #define __F_T(CONV,tag) F_TYPE##CONV##tag #define __F_TYPEDEFS(CONV,CONV_) __F_TDEF(CONV,CONV_,1)(int);\ __F_TDEF(CONV,CONV_,2)(int,int);\ @@ -57,7 +63,7 @@ (arguments[0],arguments[1],arguments[2],arguments[3],arguments[4],arguments[5],arguments[6],arguments[7],arguments[8],arguments[9]);}*/ -int FunctionCaller::CallF(size_t count,callconv conv,void* f,const vector &arguments)//more complex but not more error safe +/*int FunctionCaller::CallF(size_t count,callconv conv,void* f,const vector &arguments)//more complex but not more error safe { __F_TYPEDEFS(STD_CALL,__stdcall); __F_TYPEDEFS(FAST_CALL,__fastcall); @@ -69,13 +75,13 @@ int FunctionCaller::CallF(size_t count,callconv conv,void* f,const vector & __FCALLEX(THIS_CALL,__thiscall); __FCALLEX(CDECL_CALL,__cdecl); } -} +}*/ int FunctionCaller::CallFunction(size_t func_ptr,callconv conv,const vector &arguments) { //nasty nasty code... #ifdef LINUX_BUILD //quick fix if(conv==THIS_CALL) - conv=STD_CALL + conv=STD_CALL; #endif void* f= reinterpret_cast(func_ptr+base_); size_t count=arguments.size(); @@ -83,15 +89,15 @@ int FunctionCaller::CallFunction(size_t func_ptr,callconv conv,const vector return (reinterpret_cast(f))(); //does not matter how we call it... int ret=0; //typedefs - __F_TYPEDEFS(STD_CALL,__stdcall); - __F_TYPEDEFS(FAST_CALL,__fastcall); - __F_TYPEDEFS(THIS_CALL,__thiscall); - __F_TYPEDEFS(CDECL_CALL,__cdecl); + __F_TYPEDEFS(STD_CALL,stdcall); + __F_TYPEDEFS(FAST_CALL,fastcall); + __F_TYPEDEFS(THIS_CALL,thiscall); + __F_TYPEDEFS(CDECL_CALL,cdecl); //calls - __FCALL(STD_CALL,__stdcall); - __FCALL(FAST_CALL,__fastcall); - __FCALL(THIS_CALL,__thiscall); - __FCALL(CDECL_CALL,__cdecl); + __FCALL(STD_CALL,stdcall); + __FCALL(FAST_CALL,fastcall); + __FCALL(THIS_CALL,thiscall); + __FCALL(CDECL_CALL,cdecl); return -1; //incorect type. Should probably throw... //return CallF(count,conv,f,arguments); /*//testing part{ worked some time ago..., put where DFHack::Core is accesible @@ -112,4 +118,4 @@ int FunctionCaller::CallFunction(size_t func_ptr,callconv conv,const vector #undef __FCALL #undef __FCALLEX #undef __F_TYPEDEFS -#undef __F_T \ No newline at end of file +#undef __F_T diff --git a/plugins/Dfusion/src/lua_Hexsearch.cpp b/plugins/Dfusion/src/lua_Hexsearch.cpp index eafbd9812..49a8edc02 100644 --- a/plugins/Dfusion/src/lua_Hexsearch.cpp +++ b/plugins/Dfusion/src/lua_Hexsearch.cpp @@ -49,7 +49,7 @@ LUNE_METHODS_START(lua::Hexsearch) method(lua::Hexsearch,findall), method(lua::Hexsearch,reset), LUNE_METHODS_END(); -#define __ADDCONST(name) st.push(::Hexsearch:: ## name); st.setglobal(#name) +#define __ADDCONST(name) st.push(::Hexsearch:: name); st.setglobal(#name) void lua::RegisterHexsearch(lua::state &st) { @@ -58,4 +58,4 @@ void lua::RegisterHexsearch(lua::state &st) __ADDCONST(ANYDWORD); __ADDCONST(DWORD_); } -#undef __ADDCONST \ No newline at end of file +#undef __ADDCONST diff --git a/plugins/Dfusion/src/lua_Offsets.cpp b/plugins/Dfusion/src/lua_Offsets.cpp index 4ecbf124b..2fc72afb5 100644 --- a/plugins/Dfusion/src/lua_Offsets.cpp +++ b/plugins/Dfusion/src/lua_Offsets.cpp @@ -1,5 +1,7 @@ #include "lua_Offsets.h" +#include //TODO make a seperate module with peeks/pokes and page permisions (linux/windows spec) +//TODO maybe remove alltogether- use DFHack::Process instead? unsigned char peekb(size_t offset) { return *((unsigned char*)(offset)); @@ -18,7 +20,7 @@ void peekarb(size_t offset, void *mem,size_t size) } void peekstr(size_t offset, char* buf, size_t maxsize) { - strcpy_s(buf,maxsize,(char*)offset); + strncpy(buf,(char*)offset,maxsize); } void pokeb(size_t offset,unsigned char val) { @@ -38,7 +40,7 @@ void pokearb(size_t offset, void *mem,size_t size) } void pokestr(size_t offset, char* buf, size_t maxsize) { - strcpy_s((char*)offset,maxsize,buf); + strncpy((char*)offset,buf,maxsize); } template T peek(size_t offset) //prob lower performance @@ -153,4 +155,4 @@ void lua::RegisterEngine(lua::state &st) } lua::RegFunctionsLocal(st,lua_engine_func); st.setglobal("engine"); -} \ No newline at end of file +}