From 7ef5c3c7726ceda64a59a88fc28901407185e97d Mon Sep 17 00:00:00 2001 From: Robert Shearman Date: Wed, 7 Jun 2006 20:11:36 +0100 Subject: [PATCH] rpcrt4: Implement full-pointer support for interpreted stubs. Move the calls to the full pointer init functions before NdrClient/ServerInitializeNew, like in MIDL-generated code. --- dlls/rpcrt4/ndr_stubless.c | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/dlls/rpcrt4/ndr_stubless.c b/dlls/rpcrt4/ndr_stubless.c index 1f1e2e17b30..0053fa40130 100644 --- a/dlls/rpcrt4/ndr_stubless.c +++ b/dlls/rpcrt4/ndr_stubless.c @@ -571,6 +571,10 @@ LONG_PTR WINAPIV NdrClientCall2(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pForma pFormat += sizeof(NDR_PROC_HEADER); } + /* create the full pointer translation tables, if requested */ + if (pProcHeader->Oi_flags & RPC_FC_PROC_OIF_FULLPTR) + stubMsg.FullPtrXlatTables = NdrFullPointerXlatInit(0,XLAT_CLIENT); + if (pProcHeader->Oi_flags & RPC_FC_PROC_OIF_OBJECT) { /* object is always the first argument */ @@ -622,14 +626,6 @@ LONG_PTR WINAPIV NdrClientCall2(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pForma pFormat += pExtensions->Size; } - /* create the full pointer translation tables, if requested */ - if (pProcHeader->Oi_flags & RPC_FC_PROC_OIF_FULLPTR) -#if 0 - stubMsg.FullPtrXlatTables = NdrFullPointerXlatInit(0,XLAT_CLIENT); -#else - FIXME("initialize full pointer translation tables\n"); -#endif - stubMsg.BufferLength = 0; /* store the RPC flags away */ @@ -935,8 +931,6 @@ LONG_PTR WINAPIV NdrClientCall2(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pForma } } - /* FIXME: unbind the binding handle */ - if (ext_flags.HasNewCorrDesc) { /* free extra correlation package */ @@ -948,11 +942,9 @@ LONG_PTR WINAPIV NdrClientCall2(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pForma /* NdrPipesDone(...) */ } -#if 0 /* free the full pointer translation tables */ if (pProcHeader->Oi_flags & RPC_FC_PROC_OIF_FULLPTR) NdrFullPointerXlatFree(stubMsg.FullPtrXlatTables); -#endif /* free marshalling buffer */ if (pProcHeader->Oi_flags & RPC_FC_PROC_OIF_OBJECT) @@ -1083,6 +1075,10 @@ long WINAPI NdrStubCall2( RpcRaiseException(RPC_X_WRONG_STUB_VERSION); } + /* create the full pointer translation tables, if requested */ + if (pProcHeader->Oi_flags & RPC_FC_PROC_OIF_FULLPTR) + stubMsg.FullPtrXlatTables = NdrFullPointerXlatInit(0,XLAT_SERVER); + if (pProcHeader->Oi_flags & RPC_FC_PROC_OIF_RPCFLAGS) { NDR_PROC_HEADER_RPC * pProcHeader = (NDR_PROC_HEADER_RPC *)&pFormat[0]; @@ -1157,14 +1153,6 @@ long WINAPI NdrStubCall2( else NdrServerInitializeNew(pRpcMsg, &stubMsg, pStubDesc); - /* create the full pointer translation tables, if requested */ - if (pProcHeader->Oi_flags & RPC_FC_PROC_OIF_FULLPTR) -#if 0 - stubMsg.FullPtrXlatTables = NdrFullPointerXlatInit(0,XLAT_SERVER); -#else - FIXME("initialize full pointer translation tables\n"); -#endif - /* store the RPC flags away */ if (pProcHeader->Oi_flags & RPC_FC_PROC_OIF_RPCFLAGS) pRpcMsg->RpcFlags = ((NDR_PROC_HEADER_RPC *)pProcHeader)->rpc_flags; @@ -1505,11 +1493,9 @@ long WINAPI NdrStubCall2( /* NdrPipesDone(...) */ } -#if 0 /* free the full pointer translation tables */ if (pProcHeader->Oi_flags & RPC_FC_PROC_OIF_FULLPTR) NdrFullPointerXlatFree(stubMsg.FullPtrXlatTables); -#endif /* free server function stack */ HeapFree(GetProcessHeap(), 0, args); -- 2.11.4.GIT