[CMAKE]
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Tue, 25 Jan 2011 11:55:45 +0000 (11:55 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Tue, 25 Jan 2011 11:55:45 +0000 (11:55 +0000)
Fix return type of NdrClientCall*

svn path=/branches/cmake-bringup/; revision=50484

dll/win32/rpcrt4/cproxy.c
dll/win32/rpcrt4/ndr_stubless.c
include/psdk/rpcndr.h

index 9ce555f..1762046 100644 (file)
@@ -17,7 +17,7 @@
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- * 
+ *
  * TODO: Handle non-i386 architectures
  */
 
@@ -96,7 +96,7 @@ HRESULT WINAPI ObjectStubless(DWORD *args)
     args[0] = *(const WORD*)(fs + 8);
     TRACE("(%p)->(%d)([%d bytes]) ret=%08x\n", iface, index, args[0], args[1]);
 
-    return NdrClientCall2(stubless->pStubDesc, fs, args + 2);
+    return NdrClientCall2(stubless->pStubDesc, fs, args + 2).Simple;
 }
 
 #define BLOCK_SIZE 1024
index 645a0ca..d6b9c5f 100644 (file)
@@ -510,7 +510,7 @@ void client_do_args_old_format(PMIDL_STUB_MESSAGE pStubMsg,
         }
         else
         {
-            const NDR_PARAM_OI_OTHER *pParamOther = 
+            const NDR_PARAM_OI_OTHER *pParamOther =
                 (const NDR_PARAM_OI_OTHER *)&pFormat[current_offset];
 
             const unsigned char *pTypeFormat =
@@ -548,10 +548,7 @@ void client_do_args_old_format(PMIDL_STUB_MESSAGE pStubMsg,
     }
 }
 
-/* the return type should be CLIENT_CALL_RETURN, but this is incompatible
- * with the way gcc returns structures. "void *" should be the largest type
- * that MIDL should allow you to return anyway */
-LONG_PTR WINAPIV NdrClientCall2(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pFormat, ...)
+CLIENT_CALL_RETURN WINAPIV NdrClientCall2(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pFormat, ...)
 {
     /* pointer to start of stack where arguments start */
     RPC_MESSAGE rpcMsg;
@@ -574,7 +571,7 @@ LONG_PTR WINAPIV NdrClientCall2(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pForma
     /* -Oif or -Oicf generated format */
     BOOL bV2Format = FALSE;
     /* the value to return to the client from the remote procedure */
-    LONG_PTR RetVal = 0;
+    CLIENT_CALL_RETURN RetVal = {0};
     /* the pointer to the object when in OLE mode */
     void * This = NULL;
     PFORMAT_STRING pHandleFormat;
@@ -630,7 +627,7 @@ LONG_PTR WINAPIV NdrClientCall2(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pForma
     if (!(pProcHeader->Oi_flags & RPC_FC_PROC_OIF_OBJECT))
     {
         pFormat = client_get_handle(&stubMsg, pProcHeader, pHandleFormat, &hBinding);
-        if (!pFormat) return 0;
+        if (!pFormat) return RetVal;
     }
 
     bV2Format = (pStubDesc->Version >= 0x20000);
@@ -729,7 +726,7 @@ LONG_PTR WINAPIV NdrClientCall2(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pForma
         }
         __EXCEPT_ALL
         {
-            RetVal = NdrProxyErrorHandler(GetExceptionCode());
+            RetVal.Simple = NdrProxyErrorHandler(GetExceptionCode());
         }
         __ENDTRY
     }
@@ -830,7 +827,7 @@ LONG_PTR WINAPIV NdrClientCall2(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pForma
         client_free_handle(&stubMsg, pProcHeader, pHandleFormat, hBinding);
     }
 
-    TRACE("RetVal = 0x%lx\n", RetVal);
+    TRACE("RetVal = 0x%p\n", RetVal.Pointer);
 
     return RetVal;
 }
@@ -1465,7 +1462,7 @@ LONG WINAPI NdrStubCall2(
 
                 pRpcMsg->BufferLength = stubMsg.BufferLength;
                 /* allocate buffer for [out] and [ret] params */
-                Status = I_RpcGetBuffer(pRpcMsg); 
+                Status = I_RpcGetBuffer(pRpcMsg);
                 if (Status)
                     RpcRaiseException(Status);
                 stubMsg.Buffer = pRpcMsg->Buffer;
index dd3a532..9171044 100644 (file)
@@ -650,15 +650,13 @@ RPCRTAPI void RPC_ENTRY
 RPCRTAPI unsigned char* RPC_ENTRY
   NdrUserMarshalSimpleTypeConvert( ULONG *pFlags, unsigned char *pBuffer, unsigned char FormatChar );
 
-/* Note: this should return a CLIENT_CALL_RETURN, but calling convention for
- * returning structures/unions is different between Windows and gcc on i386. */
-LONG_PTR RPC_VAR_ENTRY
+CLIENT_CALL_RETURN RPC_VAR_ENTRY
   NdrClientCall2( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
-LONG_PTR RPC_VAR_ENTRY
+CLIENT_CALL_RETURN RPC_VAR_ENTRY
   NdrClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
-LONG_PTR RPC_VAR_ENTRY
+CLIENT_CALL_RETURN RPC_VAR_ENTRY
   NdrAsyncClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
-LONG_PTR RPC_VAR_ENTRY
+CLIENT_CALL_RETURN RPC_VAR_ENTRY
   NdrDcomAsyncClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
 
 RPCRTAPI void RPC_ENTRY