- Use Ove-style macros for NdrConformantStringMarshall definition.
- Move NdrConformantStringMarshall to new ndr_marshall.c.
- Stubs for NdrConformantStringBufferSize,
NdrConformantStringMemorySize, and NdrConformantStringUnmarshall.
diff --git a/dlls/rpcrt4/Makefile.in b/dlls/rpcrt4/Makefile.in
index 301feea..d167fb9 100644
--- a/dlls/rpcrt4/Makefile.in
+++ b/dlls/rpcrt4/Makefile.in
@@ -14,6 +14,7 @@
cproxy.c \
cpsf.c \
cstub.c \
+ ndr_marshall.c \
ndr_midl.c \
ndr_ole.c \
ndr_stubless.c \
diff --git a/dlls/rpcrt4/ndr_marshall.c b/dlls/rpcrt4/ndr_marshall.c
new file mode 100644
index 0000000..12d5511
--- /dev/null
+++ b/dlls/rpcrt4/ndr_marshall.c
@@ -0,0 +1,74 @@
+/*
+ * NDR data marshalling
+ *
+ * Copyright 2002 Greg Turner
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * TODO:
+ * - figure out whether we *really* got this right
+ * - check for errors and throw exceptions
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "winerror.h"
+#include "winreg.h"
+
+#include "wine/obj_base.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(ole);
+
+/***********************************************************************
+ * NdrConformantStringMarshall [RPCRT4.@]
+ */
+unsigned char *WINAPI NdrConformantStringMarshall(MIDL_STUB_MESSAGE *pStubMsg, unsigned char *pszMessage,
+ PFORMAT_STRING pFormat)
+{
+ FIXME("stub\n");
+ return NULL;
+}
+
+/***********************************************************************
+ * NdrConformantStringBufferSize [RPCRT4.@]
+ */
+void WINAPI NdrConformantStringBufferSize(PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat)
+{
+ FIXME("stub\n");
+}
+
+/************************************************************************
+ * NdrConformantStringMemorySize [RPCRT4.@]
+ */
+unsigned long WINAPI NdrConformantStringMemorySize( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat )
+{
+ FIXME("stub\n");
+ return 0;
+}
+
+/************************************************************************
+ * NdrConformantStringUnmarshall [RPCRT4.@]
+ */
+unsigned char *WINAPI NdrConformantStringUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char** ppMemory,
+ PFORMAT_STRING pFormat, unsigned char fMustAlloc )
+{
+ FIXME("stub\n");
+ return 0;
+}
diff --git a/dlls/rpcrt4/ndr_midl.c b/dlls/rpcrt4/ndr_midl.c
index 05eb3b6..5fa2aa2 100644
--- a/dlls/rpcrt4/ndr_midl.c
+++ b/dlls/rpcrt4/ndr_midl.c
@@ -178,16 +178,6 @@
}
/***********************************************************************
- * NdrConformantStringMarshall [RPCRT4.@]
- */
-unsigned char *WINAPI NdrConformantStringMarshall(MIDL_STUB_MESSAGE *pStubMsg, unsigned char *pszMessage,
- PFORMAT_STRING pFormat)
-{
- FIXME("stub\n");
- return NULL;
-}
-
-/***********************************************************************
* NdrGetBuffer [RPCRT4.@]
*/
unsigned char *WINAPI NdrGetBuffer(MIDL_STUB_MESSAGE *stubmsg, unsigned long buflen, RPC_BINDING_HANDLE handle)
diff --git a/dlls/rpcrt4/rpcrt4.spec b/dlls/rpcrt4/rpcrt4.spec
index ffed031..640c378 100644
--- a/dlls/rpcrt4/rpcrt4.spec
+++ b/dlls/rpcrt4/rpcrt4.spec
@@ -297,10 +297,10 @@
@ stub NdrConformantArrayMarshall
@ stub NdrConformantArrayMemorySize
@ stub NdrConformantArrayUnmarshall
-@ stub NdrConformantStringBufferSize
+@ stdcall NdrConformantStringBufferSize(ptr ptr ptr) NdrConformantStringBufferSize
@ stdcall NdrConformantStringMarshall(ptr ptr ptr) NdrConformantStringMarshall
-@ stub NdrConformantStringMemorySize
-@ stub NdrConformantStringUnmarshall
+@ stdcall NdrConformantStringMemorySize(ptr ptr) NdrConformantStringMemorySize
+@ stdcall NdrConformantStringUnmarshall(ptr ptr ptr long) NdrConformantStringUnmarshall
@ stub NdrConformantStructBufferSize
@ stub NdrConformantStructFree
@ stub NdrConformantStructMarshall
diff --git a/include/rpcndr.h b/include/rpcndr.h
index 9e1f9dc..d7d4dc8 100644
--- a/include/rpcndr.h
+++ b/include/rpcndr.h
@@ -240,7 +240,7 @@
NdrSimpleTypeUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, unsigned char FormatChar );
/* while MS declares each prototype separately, I prefer to use macros for this kind of thing instead */
-#define TYPE_MARSHAL(type) \
+#define SIMPLE_TYPE_MARSHAL(type) \
RPCRTAPI unsigned char* RPC_ENTRY \
Ndr##type##Marshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat ); \
RPCRTAPI unsigned char* RPC_ENTRY \
@@ -248,7 +248,10 @@
RPCRTAPI void RPC_ENTRY \
Ndr##type##BufferSize( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat ); \
RPCRTAPI unsigned long RPC_ENTRY \
- Ndr##type##MemorySize( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat ); \
+ Ndr##type##MemorySize( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
+
+#define TYPE_MARSHAL(type) \
+ SIMPLE_TYPE_MARSHAL(type) \
RPCRTAPI void RPC_ENTRY \
Ndr##type##Free( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );
@@ -269,7 +272,11 @@
TYPE_MARSHAL(UserMarshal)
TYPE_MARSHAL(InterfacePointer)
+SIMPLE_TYPE_MARSHAL(ConformantString)
+SIMPLE_TYPE_MARSHAL(NonConformantString)
+
#undef TYPE_MARSHAL
+#undef SIMPLE_TYPE_MARSHAL
RPCRTAPI void RPC_ENTRY
NdrConvert2( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, long NumberParams );
@@ -300,9 +307,6 @@
NdrClientInitializeNew( PRPC_MESSAGE pRpcMessage, PMIDL_STUB_MESSAGE pStubMsg,
PMIDL_STUB_DESC pStubDesc, int unknown );
RPCRTAPI unsigned char* RPC_ENTRY
- NdrConformantStringMarshall( MIDL_STUB_MESSAGE *pStubMsg, unsigned char *pszMessage,
- PFORMAT_STRING pFormat);
-RPCRTAPI unsigned char* RPC_ENTRY
NdrGetBuffer( MIDL_STUB_MESSAGE *stubmsg, unsigned long buflen, RPC_BINDING_HANDLE handle );
RPCRTAPI void RPC_ENTRY
NdrFreeBuffer( MIDL_STUB_MESSAGE *pStubMsg );