rpcrt4: Retrieve the stack argument pointer in a more portable way in NdrClientCall.
This commit is contained in:
parent
e095467b3c
commit
9de9cbb324
|
@ -580,6 +580,7 @@ LONG_PTR WINAPIV NdrClientCall2(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pForma
|
||||||
PFORMAT_STRING pHandleFormat;
|
PFORMAT_STRING pHandleFormat;
|
||||||
/* correlation cache */
|
/* correlation cache */
|
||||||
ULONG_PTR NdrCorrCache[256];
|
ULONG_PTR NdrCorrCache[256];
|
||||||
|
__ms_va_list args;
|
||||||
|
|
||||||
TRACE("pStubDesc %p, pFormat %p, ...\n", pStubDesc, pFormat);
|
TRACE("pStubDesc %p, pFormat %p, ...\n", pStubDesc, pFormat);
|
||||||
|
|
||||||
|
@ -618,11 +619,9 @@ LONG_PTR WINAPIV NdrClientCall2(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pForma
|
||||||
TRACE("MIDL stub version = 0x%x\n", pStubDesc->MIDLVersion);
|
TRACE("MIDL stub version = 0x%x\n", pStubDesc->MIDLVersion);
|
||||||
|
|
||||||
/* needed for conformance of top-level objects */
|
/* needed for conformance of top-level objects */
|
||||||
#ifdef __i386__
|
__ms_va_start( args, pFormat );
|
||||||
stubMsg.StackTop = *(unsigned char **)(&pFormat+1);
|
stubMsg.StackTop = va_arg( args, unsigned char * );
|
||||||
#else
|
__ms_va_end( args );
|
||||||
# warning Stack not retrieved for your CPU architecture
|
|
||||||
#endif
|
|
||||||
|
|
||||||
pHandleFormat = pFormat;
|
pHandleFormat = pFormat;
|
||||||
|
|
||||||
|
@ -1654,6 +1653,7 @@ LONG_PTR WINAPIV NdrAsyncClientCall(PMIDL_STUB_DESC pStubDesc,
|
||||||
const NDR_PROC_HEADER * pProcHeader = (const NDR_PROC_HEADER *)&pFormat[0];
|
const NDR_PROC_HEADER * pProcHeader = (const NDR_PROC_HEADER *)&pFormat[0];
|
||||||
/* -Oif or -Oicf generated format */
|
/* -Oif or -Oicf generated format */
|
||||||
BOOL bV2Format = FALSE;
|
BOOL bV2Format = FALSE;
|
||||||
|
__ms_va_list args;
|
||||||
|
|
||||||
TRACE("pStubDesc %p, pFormat %p, ...\n", pStubDesc, pFormat);
|
TRACE("pStubDesc %p, pFormat %p, ...\n", pStubDesc, pFormat);
|
||||||
|
|
||||||
|
@ -1705,13 +1705,10 @@ LONG_PTR WINAPIV NdrAsyncClientCall(PMIDL_STUB_DESC pStubDesc,
|
||||||
TRACE("MIDL stub version = 0x%x\n", pStubDesc->MIDLVersion);
|
TRACE("MIDL stub version = 0x%x\n", pStubDesc->MIDLVersion);
|
||||||
|
|
||||||
/* needed for conformance of top-level objects */
|
/* needed for conformance of top-level objects */
|
||||||
#ifdef __i386__
|
|
||||||
pStubMsg->StackTop = I_RpcAllocate(async_call_data->stack_size);
|
pStubMsg->StackTop = I_RpcAllocate(async_call_data->stack_size);
|
||||||
/* FIXME: this may read one more DWORD than is necessary, but it shouldn't hurt */
|
__ms_va_start( args, pFormat );
|
||||||
memcpy(pStubMsg->StackTop, *(unsigned char **)(&pFormat+1), async_call_data->stack_size);
|
memcpy(pStubMsg->StackTop, va_arg( args, unsigned char * ), async_call_data->stack_size);
|
||||||
#else
|
__ms_va_end( args );
|
||||||
# warning Stack not retrieved for your CPU architecture
|
|
||||||
#endif
|
|
||||||
|
|
||||||
pAsync = *(RPC_ASYNC_STATE **)pStubMsg->StackTop;
|
pAsync = *(RPC_ASYNC_STATE **)pStubMsg->StackTop;
|
||||||
pAsync->StubInfo = async_call_data;
|
pAsync->StubInfo = async_call_data;
|
||||||
|
|
Loading…
Reference in New Issue