From 0a051ab32e934ce1da8e5dc36337b9a45ba59a2a Mon Sep 17 00:00:00 2001 From: Dr!fter Date: Sun, 25 Aug 2013 22:45:42 -0400 Subject: [PATCH] Fix string_t return hook, Fix GetHandleIfValidOrError checking only for g_HookSetupHandle --- natives.cpp | 2 +- vhook.cpp | 36 ++++++++++++++++++++---------------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/natives.cpp b/natives.cpp index c7fbb07..db9f162 100644 --- a/natives.cpp +++ b/natives.cpp @@ -26,7 +26,7 @@ bool GetHandleIfValidOrError(HandleType_t type, void **object, IPluginContext *p HandleError err; HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); - if((err = handlesys->ReadHandle(param, g_HookSetupHandle, &sec, object)) != HandleError_None) + if((err = handlesys->ReadHandle(param, type, &sec, object)) != HandleError_None) { return pContext->ThrowNativeError("Invalid Handle %x (error %d)", param, err) != 0; } diff --git a/vhook.cpp b/vhook.cpp index c147809..f033b2c 100644 --- a/vhook.cpp +++ b/vhook.cpp @@ -45,13 +45,17 @@ DHooksManager::DHooksManager(HookSetup *setup, void *iface, IPluginFunction *rem { protoInfo.SetReturnType(0, SourceHook::PassInfo::PassType_Unknown, 0, NULL, NULL, NULL, NULL); } - else if(this->callback->returnType != ReturnType_Float) + else if(this->callback->returnType == ReturnType_Float) { - protoInfo.SetReturnType(sizeof(void *), SourceHook::PassInfo::PassType_Basic, setup->returnFlag, NULL, NULL, NULL, NULL); + protoInfo.SetReturnType(sizeof(void *), SourceHook::PassInfo::PassType_Float, setup->returnFlag, NULL, NULL, NULL, NULL); + } + else if(this->callback->returnType == ReturnType_String) + { + protoInfo.SetReturnType(sizeof(void *), SourceHook::PassInfo::PassType_Object, setup->returnFlag, NULL, NULL, NULL, NULL); } else { - protoInfo.SetReturnType(sizeof(void *), SourceHook::PassInfo::PassType_Float, setup->returnFlag, NULL, NULL, NULL, NULL); + protoInfo.SetReturnType(sizeof(void *), SourceHook::PassInfo::PassType_Basic, setup->returnFlag, NULL, NULL, NULL, NULL); } HookManagerPubFunc hook = g_pHookManager->MakeHookMan(protoInfo, 0, this->callback->offset); @@ -135,7 +139,7 @@ HookReturnStruct *GetReturnStruct(DHooksCallback *dg, const void *result) switch(dg->returnType) { case ReturnType_String: - *(string_t *)res->orgResult = *(string_t *)res->orgResult; + *(string_t *)res->orgResult = *(string_t *)result; break; //ReturnType_Vector, case ReturnType_Int: @@ -290,9 +294,9 @@ void *Callback(DHooksCallback *dg, void **argStack) if(dg->returnType != ReturnType_Void) { if(returnStruct->isChanged) - { - g_SHPtr->SetRes(MRES_OVERRIDE); - mres = MRES_OVERRIDE; + { + g_SHPtr->SetRes(MRES_OVERRIDE); + mres = MRES_OVERRIDE; ret = *(void **)returnStruct->newResult; } else //Throw an error if no override was set @@ -307,9 +311,9 @@ void *Callback(DHooksCallback *dg, void **argStack) if(dg->returnType != ReturnType_Void) { if(returnStruct->isChanged) - { - g_SHPtr->SetRes(MRES_SUPERCEDE); - mres = MRES_SUPERCEDE; + { + g_SHPtr->SetRes(MRES_SUPERCEDE); + mres = MRES_SUPERCEDE; ret = *(void **)returnStruct->newResult; } else //Throw an error if no override was set @@ -444,9 +448,9 @@ void *Callback_float(DHooksCallback *dg, void **argStack) if(dg->returnType != ReturnType_Void) { if(returnStruct->isChanged) - { - g_SHPtr->SetRes(MRES_OVERRIDE); - mres = MRES_OVERRIDE; + { + g_SHPtr->SetRes(MRES_OVERRIDE); + mres = MRES_OVERRIDE; *(float *)ret = *(float *)returnStruct->newResult; } else //Throw an error if no override was set @@ -461,9 +465,9 @@ void *Callback_float(DHooksCallback *dg, void **argStack) if(dg->returnType != ReturnType_Void) { if(returnStruct->isChanged) - { - g_SHPtr->SetRes(MRES_SUPERCEDE); - mres = MRES_SUPERCEDE; + { + g_SHPtr->SetRes(MRES_SUPERCEDE); + mres = MRES_SUPERCEDE; *(float *)ret = *(float *)returnStruct->newResult; } else //Throw an error if no override was set