Module: wine Branch: refs/heads/master Commit: c3a087eb45abc725061d315a17a232cc697ed1d1 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=c3a087eb45abc725061d315a...
Author: Robert Shearman rob@codeweavers.com Date: Wed May 10 13:13:25 2006 +0100
rpcrt4: Align conformances and variances correctly, according the the DCE/RPC spec.
---
dlls/rpcrt4/ndr_marshall.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/dlls/rpcrt4/ndr_marshall.c b/dlls/rpcrt4/ndr_marshall.c index a3bdcf5..bbf9dd3 100644 --- a/dlls/rpcrt4/ndr_marshall.c +++ b/dlls/rpcrt4/ndr_marshall.c @@ -308,6 +308,7 @@ static inline BOOL IsConformanceOrVarian
PFORMAT_STRING ReadConformance(MIDL_STUB_MESSAGE *pStubMsg, PFORMAT_STRING pFormat) { + ALIGN_POINTER(pStubMsg->Buffer, 4); pStubMsg->MaxCount = NDR_LOCAL_UINT32_READ(pStubMsg->Buffer); pStubMsg->Buffer += 4; TRACE("unmarshalled conformance is %ld\n", pStubMsg->MaxCount); @@ -326,6 +327,7 @@ static inline PFORMAT_STRING ReadVarianc goto done; }
+ ALIGN_POINTER(pStubMsg->Buffer, 4); pStubMsg->Offset = NDR_LOCAL_UINT32_READ(pStubMsg->Buffer); pStubMsg->Buffer += 4; TRACE("offset is %ld\n", pStubMsg->Offset); @@ -343,6 +345,7 @@ done: /* writes the conformance value to the buffer */ static inline void WriteConformance(MIDL_STUB_MESSAGE *pStubMsg) { + ALIGN_POINTER(pStubMsg->Buffer, 4); NDR_LOCAL_UINT32_WRITE(pStubMsg->Buffer, pStubMsg->MaxCount); pStubMsg->Buffer += 4; } @@ -350,6 +353,7 @@ static inline void WriteConformance(MIDL /* writes the variance values to the buffer */ static inline void WriteVariance(MIDL_STUB_MESSAGE *pStubMsg) { + ALIGN_POINTER(pStubMsg->Buffer, 4); NDR_LOCAL_UINT32_WRITE(pStubMsg->Buffer, pStubMsg->Offset); pStubMsg->Buffer += 4; NDR_LOCAL_UINT32_WRITE(pStubMsg->Buffer, pStubMsg->ActualCount); @@ -359,12 +363,14 @@ static inline void WriteVariance(MIDL_ST /* requests buffer space for the conformance value */ static inline void SizeConformance(MIDL_STUB_MESSAGE *pStubMsg) { + ALIGN_LENGTH(pStubMsg->BufferLength, 4); pStubMsg->BufferLength += 4; }
/* requests buffer space for the variance values */ static inline void SizeVariance(MIDL_STUB_MESSAGE *pStubMsg) { + ALIGN_LENGTH(pStubMsg->BufferLength, 4); pStubMsg->BufferLength += 8; }