Module: wine Branch: refs/heads/master Commit: 4d65110b906e7247f7fd312651a25962372bcd0b URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=4d65110b906e7247f7fd3126...
Author: Robert Shearman rob@codeweavers.com Date: Sat May 13 16:58:31 2006 +0100
rpcrt4: Make NdrConformantStringUnmarshall use the new Read{Variance,Conformance} functions and adapt them to be callable without having a correlation descriptor.
---
dlls/rpcrt4/ndr_marshall.c | 13 ++++++------- 1 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/dlls/rpcrt4/ndr_marshall.c b/dlls/rpcrt4/ndr_marshall.c index 6c9e852..65fd57d 100644 --- a/dlls/rpcrt4/ndr_marshall.c +++ b/dlls/rpcrt4/ndr_marshall.c @@ -320,7 +320,7 @@ PFORMAT_STRING ReadConformance(MIDL_STUB
static inline PFORMAT_STRING ReadVariance(MIDL_STUB_MESSAGE *pStubMsg, PFORMAT_STRING pFormat) { - if (!IsConformanceOrVariancePresent(pFormat)) + if (pFormat && !IsConformanceOrVariancePresent(pFormat)) { pStubMsg->Offset = 0; pStubMsg->ActualCount = pStubMsg->MaxCount; @@ -626,18 +626,15 @@ unsigned long WINAPI NdrConformantString unsigned char *WINAPI NdrConformantStringUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char** ppMemory, PFORMAT_STRING pFormat, unsigned char fMustAlloc ) { - unsigned long len, esize, ofs; + unsigned long len, esize;
TRACE("(pStubMsg == ^%p, *pMemory == ^%p, pFormat == ^%p, fMustAlloc == %u)\n", pStubMsg, *ppMemory, pFormat, fMustAlloc);
assert(pFormat && ppMemory && pStubMsg);
- pStubMsg->Buffer += 4; - ofs = NDR_LOCAL_UINT32_READ(pStubMsg->Buffer); - pStubMsg->Buffer += 4; - len = NDR_LOCAL_UINT32_READ(pStubMsg->Buffer); - pStubMsg->Buffer += 4; + ReadConformance(pStubMsg, NULL); + ReadVariance(pStubMsg, NULL);
if (*pFormat == RPC_FC_C_CSTRING) esize = 1; else if (*pFormat == RPC_FC_C_WSTRING) esize = 2; @@ -651,6 +648,8 @@ unsigned char *WINAPI NdrConformantStrin FIXME("sized string format=%d\n", pFormat[1]); }
+ len = pStubMsg->ActualCount; + if (fMustAlloc || !*ppMemory) *ppMemory = NdrAllocate(pStubMsg, len*esize + BUFFER_PARANOIA);