Log: Ove Kaaven <ovek@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