yet another rpc patch
Ove Kaaven
ovek at arcticnet.no
Mon May 19 17:42:16 CDT 2003
Log:
Ove Kaaven <ovek at transgaming.com>
Implemented "dereference" pointer flag.
Added NdrClearOutParameters stub.
Index: dlls/rpcrt4/ndr_marshall.c
===================================================================
RCS file: /home/wine/wine/dlls/rpcrt4/ndr_marshall.c,v
retrieving revision 1.19
diff -u -r1.19 ndr_marshall.c
--- dlls/rpcrt4/ndr_marshall.c 26 Apr 2003 02:12:14 -0000 1.19
+++ dlls/rpcrt4/ndr_marshall.c 19 May 2003 22:39:55 -0000
@@ -561,7 +561,10 @@
pFormat += 2;
if (attr & RPC_FC_P_SIMPLEPOINTER) desc = pFormat;
else desc = pFormat + *(SHORT*)pFormat;
- if (attr & RPC_FC_P_DEREF) FIXME("deref?\n");
+ if (attr & RPC_FC_P_DEREF) {
+ Pointer = *(unsigned char**)Pointer;
+ TRACE("deref => %p\n", Pointer);
+ }
*(LPVOID*)Buffer = 0;
@@ -597,7 +600,10 @@
pFormat += 2;
if (attr & RPC_FC_P_SIMPLEPOINTER) desc = pFormat;
else desc = pFormat + *(SHORT*)pFormat;
- if (attr & RPC_FC_P_DEREF) FIXME("deref?\n");
+ if (attr & RPC_FC_P_DEREF) {
+ pPointer = *(unsigned char***)pPointer;
+ TRACE("deref => %p\n", pPointer);
+ }
switch (type) {
case RPC_FC_RP: /* ref pointer (always non-null) */
@@ -630,7 +636,10 @@
pFormat += 2;
if (attr & RPC_FC_P_SIMPLEPOINTER) desc = pFormat;
else desc = pFormat + *(SHORT*)pFormat;
- if (attr & RPC_FC_P_DEREF) FIXME("deref?\n");
+ if (attr & RPC_FC_P_DEREF) {
+ Pointer = *(unsigned char**)Pointer;
+ TRACE("deref => %p\n", Pointer);
+ }
switch (type) {
case RPC_FC_RP: /* ref pointer (always non-null) */
@@ -660,7 +669,9 @@
pFormat += 2;
if (attr & RPC_FC_P_SIMPLEPOINTER) desc = pFormat;
else desc = pFormat + *(SHORT*)pFormat;
- if (attr & RPC_FC_P_DEREF) FIXME("deref?\n");
+ if (attr & RPC_FC_P_DEREF) {
+ TRACE("deref\n");
+ }
switch (type) {
case RPC_FC_RP: /* ref pointer (always non-null) */
@@ -693,7 +704,10 @@
pFormat += 2;
if (attr & RPC_FC_P_SIMPLEPOINTER) desc = pFormat;
else desc = pFormat + *(SHORT*)pFormat;
- if (attr & RPC_FC_P_DEREF) FIXME("deref?\n");
+ if (attr & RPC_FC_P_DEREF) {
+ Pointer = *(unsigned char**)Pointer;
+ TRACE("deref => %p\n", Pointer);
+ }
if (!Pointer) return;
@@ -717,6 +731,8 @@
case RPC_FC_C_WSTRING:
if (pStubMsg->ReuseBuffer) goto notfree;
break;
+ case RPC_FC_IP:
+ goto notfree;
}
if (attr & RPC_FC_P_ONSTACK) {
@@ -2067,6 +2083,16 @@
pStubMsg->StubDesc->aUserMarshalQuadruple[index].pfnFree(
&uflag, pMemory);
+}
+
+/***********************************************************************
+ * NdrClearOutParameters [RPCRT4.@]
+ */
+void WINAPI NdrClearOutParameters(PMIDL_STUB_MESSAGE pStubMsg,
+ PFORMAT_STRING pFormat,
+ void *ArgAddr)
+{
+ FIXME("(%p,%p,%p): stub\n", pStubMsg, pFormat, ArgAddr);
}
/***********************************************************************
Index: dlls/rpcrt4/rpcrt4.spec
===================================================================
RCS file: /home/wine/wine/dlls/rpcrt4/rpcrt4.spec,v
retrieving revision 1.44
diff -u -r1.44 rpcrt4.spec
--- dlls/rpcrt4/rpcrt4.spec 26 Apr 2003 02:12:14 -0000 1.44
+++ dlls/rpcrt4/rpcrt4.spec 19 May 2003 22:39:55 -0000
@@ -225,7 +225,7 @@
@ stdcall NdrAllocate(ptr long)
@ stub NdrAsyncClientCall
@ stub NdrAsyncServerCall
-@ stub NdrClearOutParameters
+@ stdcall NdrClearOutParameters(ptr ptr ptr) NdrClearOutParameters
@ stub NdrClientCall
@ varargs NdrClientCall2(ptr ptr)
@ stub NdrClientInitialize
More information about the wine-patches
mailing list