Robert Shearman : rpcrt4:
Use macros to generate the code for unmarshaling base types.
Alexandre Julliard
julliard at wine.codeweavers.com
Sat May 20 11:22:53 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: a2767e8d71f5b2f6a7456a53c2cf4bf816e59ef8
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=a2767e8d71f5b2f6a7456a53c2cf4bf816e59ef8
Author: Robert Shearman <rob at codeweavers.com>
Date: Fri May 19 16:02:59 2006 +0100
rpcrt4: Use macros to generate the code for unmarshaling base types.
---
dlls/rpcrt4/ndr_marshall.c | 29 ++++++++++++-----------------
1 files changed, 12 insertions(+), 17 deletions(-)
diff --git a/dlls/rpcrt4/ndr_marshall.c b/dlls/rpcrt4/ndr_marshall.c
index 99777ea..a38ddf7 100644
--- a/dlls/rpcrt4/ndr_marshall.c
+++ b/dlls/rpcrt4/ndr_marshall.c
@@ -4106,49 +4106,43 @@ static unsigned char *WINAPI NdrBaseType
TRACE("*ppMemory: %p\n", *ppMemory);
+#define BASE_TYPE_UNMARSHALL(type) \
+ ALIGN_POINTER(pStubMsg->Buffer, sizeof(type)); \
+ **(type **)ppMemory = *(type *)pStubMsg->Buffer; \
+ pStubMsg->Buffer += sizeof(type);
+
switch(*pFormat)
{
case RPC_FC_BYTE:
case RPC_FC_CHAR:
case RPC_FC_SMALL:
case RPC_FC_USMALL:
- **(UCHAR **)ppMemory = *(UCHAR *)pStubMsg->Buffer;
- pStubMsg->Buffer += sizeof(UCHAR);
+ BASE_TYPE_UNMARSHALL(UCHAR);
TRACE("value: 0x%02x\n", **(UCHAR **)ppMemory);
break;
case RPC_FC_WCHAR:
case RPC_FC_SHORT:
case RPC_FC_USHORT:
- ALIGN_POINTER(pStubMsg->Buffer, sizeof(USHORT));
- **(USHORT **)ppMemory = *(USHORT *)pStubMsg->Buffer;
- pStubMsg->Buffer += sizeof(USHORT);
+ BASE_TYPE_UNMARSHALL(USHORT);
TRACE("value: 0x%04x\n", **(USHORT **)ppMemory);
break;
case RPC_FC_LONG:
case RPC_FC_ULONG:
case RPC_FC_ERROR_STATUS_T:
case RPC_FC_ENUM32:
- ALIGN_POINTER(pStubMsg->Buffer, sizeof(ULONG));
- **(ULONG **)ppMemory = *(ULONG *)pStubMsg->Buffer;
- pStubMsg->Buffer += sizeof(ULONG);
+ BASE_TYPE_UNMARSHALL(ULONG);
TRACE("value: 0x%08lx\n", **(ULONG **)ppMemory);
break;
case RPC_FC_FLOAT:
- ALIGN_POINTER(pStubMsg->Buffer, sizeof(float));
- **(float **)ppMemory = *(float *)pStubMsg->Buffer;
- pStubMsg->Buffer += sizeof(float);
+ BASE_TYPE_UNMARSHALL(float);
TRACE("value: %f\n", **(float **)ppMemory);
break;
case RPC_FC_DOUBLE:
- ALIGN_POINTER(pStubMsg->Buffer, sizeof(double));
- **(double **)ppMemory = *(double*)pStubMsg->Buffer;
- pStubMsg->Buffer += sizeof(double);
+ BASE_TYPE_UNMARSHALL(double);
TRACE("value: %f\n", **(double **)ppMemory);
break;
case RPC_FC_HYPER:
- ALIGN_POINTER(pStubMsg->Buffer, sizeof(ULONGLONG));
- **(ULONGLONG **)ppMemory = *(ULONGLONG *)pStubMsg->Buffer;
- pStubMsg->Buffer += sizeof(ULONGLONG);
+ BASE_TYPE_UNMARSHALL(ULONGLONG);
TRACE("value: %s\n", wine_dbgstr_longlong(**(ULONGLONG **)ppMemory));
break;
case RPC_FC_ENUM16:
@@ -4161,6 +4155,7 @@ static unsigned char *WINAPI NdrBaseType
default:
FIXME("Unhandled base type: 0x%02x\n", *pFormat);
}
+#undef BASE_TYPE_UNMARSHALL
/* FIXME: what is the correct return value? */
More information about the wine-cvs
mailing list