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