rpc_K01-r1.diff
Greg Turner
gmturner007 at ameritech.net
Mon Jan 20 09:33:18 CST 2003
In addition to implementing Alexandre's advice to eliminate
the rpcss.exe.so-specific environment-variable override by
using PATH instead, this also adds the following:
o Uses the midl-generated _c.c and _s.c files almost
unmodified, using the macros from my previous patchset.
o Supposedly supports linux/ppc -- this is the only other
platform my MIDL supports. Other platforms should skip
the test entirely via #ifdef's. Note that the difference
between the PPC and W32 versions are quite small. This
suggests widl could generate cross-platform proxy/stub
code with #ifdef's around platform-specific portions,
something MIDL doesn't do.
o Now has separate server and client executables (the rpc
test itself is the client, the server is to be found
in dlls/rpcrt4/tests/stringinput_server.
Depends on the seh_try_macros series of patches. A rollup of
the seh_try_macros is enclosed as seh_try_macros-0to7.bz2.
You will need to run autoconf after applying this patch.
Note to Alexandre: I am not 100% sure I'm doing the right
stuff with the Makefiles. You probably ought to review this
part and decide if there is a better way to hook this into
the wine build process.
Note to Ove: widl_scraps.h contains those things that I needed,
but which were not generated by midl. As you can see, it's quite
short. As for the .acf thing: I think there is an option in MIDL
to embed the .acf stuff right in the .idl... but I didn't use it
yet. Let me know if I should switch to that approach, or at least
try.
License: X11 / Bugroff
Changelog:
* ./: configure.ac;
./dlls/kernel: kernel32.spec;
./dlls/rpcrt4: ndr_midl.c, rpc_server.c, rpcrt4_main.c,
Makefile.in, rpcrt4.spec;
./dlls/rpcrt4/tests: Makefile.in, rpc.c, gen.sh (new),
stringinput.acf (new), stringinput.h (new), widl_scraps.h (new),
stringinput.idl (new), stringinput_x86_c.c (new),
stringinput_ppc_c.c (new), RC.h (new), midlbat.bat (new);
./dlls/rpcrt4/tests/stringinput_server (new dir):
stringinput_manager.c (new), stringinput_server_main.c (new),
stringinput_x86_s.c (new), stringinput_ppc_s.c (new),
Makefile.in (new);
./include: rpcndr.h, rpc.h, rpcdce.h;
./programs/rpcss: rpcss.h:
Greg Turner <gmturner007 at ameritech.net>
- add an actual cross-process RPC test, using MIDL-generated
headers with some minor modifications for missing functionality
- increase the default RPCSS timeout
- add the NdrFc{Short,Long} macros
- fix some handling of the End pointers for Ndr marshalling
- fix some traces with missing \n's.
- route CmdBatNotification to NOOP (fixes batch-file execution
under w2k's cmd.exe
- a stub for RpcRaiseException
- implement the RPC_BAD_STUB_DATA_EXCEPTION_FILTER macro
- a little script to automate building the various _c and _s files.
--
diff -ur -x CVS -x 'bigdif*' -x autom4te.cache ../wine.test/configure.ac ./configure.ac
--- ../wine.test/configure.ac 2003-01-14 23:40:20.000000000 -0600
+++ ./configure.ac 2003-01-19 21:54:42.000000000 -0600
@@ -1448,6 +1448,7 @@
dlls/richedit/Makefile
dlls/rpcrt4/Makefile
dlls/rpcrt4/tests/Makefile
+dlls/rpcrt4/tests/stringinput_server/Makefile
dlls/serialui/Makefile
dlls/setupapi/Makefile
dlls/shdocvw/Makefile
diff -ur -x CVS -x 'bigdif*' -x autom4te.cache ../wine.test/dlls/kernel/kernel32.spec ./dlls/kernel/kernel32.spec
--- ../wine.test/dlls/kernel/kernel32.spec 2003-01-13 17:24:46.000000000 -0600
+++ ./dlls/kernel/kernel32.spec 2003-01-19 21:54:42.000000000 -0600
@@ -914,7 +914,7 @@
@ stub BaseAttachCompleteThunk
@ stub BasepDebugDump
@ stub CloseConsoleHandle
-@ stub CmdBatNotification
+@ stdcall CmdBatNotification() KERNEL_nop
@ stub ConsoleMenuControl
@ stub ConsoleSubst
@ stub CreateVirtualBuffer
diff -ur -x CVS -x 'bigdif*' -x autom4te.cache ../wine.test/dlls/rpcrt4/Makefile.in ./dlls/rpcrt4/Makefile.in
--- ../wine.test/dlls/rpcrt4/Makefile.in 2003-01-03 19:32:51.000000000 -0600
+++ ./dlls/rpcrt4/Makefile.in 2003-01-19 21:54:42.000000000 -0600
@@ -25,7 +25,7 @@
rpcrt4_main.c \
rpcss_np_client.c
-SUBDIRS = tests
+SUBDIRS = tests tests/stringinput_server
@MAKE_DLL_RULES@
diff -ur -x CVS -x 'bigdif*' -x autom4te.cache ../wine.test/dlls/rpcrt4/ndr_midl.c ./dlls/rpcrt4/ndr_midl.c
--- ../wine.test/dlls/rpcrt4/ndr_midl.c 2003-01-14 23:45:29.000000000 -0600
+++ ./dlls/rpcrt4/ndr_midl.c 2003-01-19 21:54:42.000000000 -0600
@@ -214,6 +214,7 @@
pStubMsg->RpcMsg = pRpcMsg;
pStubMsg->Buffer = pRpcMsg->Buffer;
pStubMsg->BufferLength = pRpcMsg->BufferLength;
+ pStubMsg->BufferEnd = pStubMsg->Buffer + pStubMsg->BufferLength;
/* FIXME: determine the proper return value */
return NULL;
@@ -236,8 +237,9 @@
return NULL;
stubmsg->BufferLength = stubmsg->RpcMsg->BufferLength;
- stubmsg->BufferEnd = stubmsg->BufferStart = 0;
- return (stubmsg->Buffer = (unsigned char *)stubmsg->RpcMsg->Buffer);
+ stubmsg->Buffer = stubmsg->BufferStart = (unsigned char *)stubmsg->RpcMsg->Buffer;
+ stubmsg->BufferEnd = stubmsg->Buffer + stubmsg->BufferLength;
+ return (stubmsg->Buffer);
}
/***********************************************************************
* NdrFreeBuffer [RPCRT4.@]
@@ -247,7 +249,7 @@
TRACE("(pStubMsg == ^%p): wild guess.\n", pStubMsg);
I_RpcFreeBuffer(pStubMsg->RpcMsg);
pStubMsg->BufferLength = 0;
- pStubMsg->Buffer = (unsigned char *)(pStubMsg->RpcMsg->Buffer = NULL);
+ pStubMsg->Buffer = pStubMsg->BufferEnd = (unsigned char *)(pStubMsg->RpcMsg->Buffer = NULL);
}
/************************************************************************
diff -ur -x CVS -x 'bigdif*' -x autom4te.cache ../wine.test/dlls/rpcrt4/rpc_server.c ./dlls/rpcrt4/rpc_server.c
--- ../wine.test/dlls/rpcrt4/rpc_server.c 2003-01-14 23:45:29.000000000 -0600
+++ ./dlls/rpcrt4/rpc_server.c 2003-01-19 21:54:42.000000000 -0600
@@ -458,7 +458,7 @@
*/
RPC_STATUS WINAPI RpcServerUseProtseqA(LPSTR Protseq, unsigned int MaxCalls, void *SecurityDescriptor)
{
- TRACE("(Protseq == %s, MaxCalls == %d, SecurityDescriptor == ^%p)", debugstr_a(Protseq), MaxCalls, SecurityDescriptor);
+ TRACE("(Protseq == %s, MaxCalls == %d, SecurityDescriptor == ^%p)\n", debugstr_a(Protseq), MaxCalls, SecurityDescriptor);
return RpcServerUseProtseqEpA(Protseq, MaxCalls, NULL, SecurityDescriptor);
}
@@ -467,7 +467,7 @@
*/
RPC_STATUS WINAPI RpcServerUseProtseqW(LPWSTR Protseq, unsigned int MaxCalls, void *SecurityDescriptor)
{
- TRACE("Protseq == %s, MaxCalls == %d, SecurityDescriptor == ^%p)", debugstr_w(Protseq), MaxCalls, SecurityDescriptor);
+ TRACE("Protseq == %s, MaxCalls == %d, SecurityDescriptor == ^%p)\n", debugstr_w(Protseq), MaxCalls, SecurityDescriptor);
return RpcServerUseProtseqEpW(Protseq, MaxCalls, NULL, SecurityDescriptor);
}
diff -ur -x CVS -x 'bigdif*' -x autom4te.cache ../wine.test/dlls/rpcrt4/rpcrt4.spec ./dlls/rpcrt4/rpcrt4.spec
--- ../wine.test/dlls/rpcrt4/rpcrt4.spec 2002-12-02 23:52:12.000000000 -0600
+++ ./dlls/rpcrt4/rpcrt4.spec 2003-01-19 21:54:42.000000000 -0600
@@ -109,7 +109,7 @@
@ stub RpcObjectSetType
@ stub RpcProtseqVectorFreeA
@ stub RpcProtseqVectorFreeW
-@ stub RpcRaiseException
+@ stdcall RpcRaiseException(long) RpcRaiseException
@ stub RpcRegisterAsyncInfo
@ stub RpcRevertToSelf
@ stub RpcRevertToSelfEx
diff -ur -x CVS -x 'bigdif*' -x autom4te.cache ../wine.test/dlls/rpcrt4/rpcrt4_main.c ./dlls/rpcrt4/rpcrt4_main.c
--- ../wine.test/dlls/rpcrt4/rpcrt4_main.c 2003-01-14 23:45:29.000000000 -0600
+++ ./dlls/rpcrt4/rpcrt4_main.c 2003-01-19 21:54:42.000000000 -0600
@@ -706,7 +706,6 @@
/* apparently it's not OK to use a constant string below */
CopyMemory(cmd, "rpcss", 6);
- /* FIXME: will this do the right thing when run as a test? */
rslt = CreateProcessA(
NULL, /* executable */
cmd, /* command line */
@@ -784,3 +783,20 @@
return TRUE;
}
+
+/***********************************************************************
+ * RpcRaiseException
+ *
+ * Raise an Exception.
+ *
+ * PARAMS
+ * exception [I] RPC_STATUS describing the "problem".
+ *
+ * RETURNS
+ * doesn't.
+ */
+void WINAPI RPC_ENTRY RpcRaiseException( RPC_STATUS exception )
+{
+ FIXME("RpcRaiseException: stub, will assert(FALSE)\n");
+ assert(FALSE);
+}
diff -ur -x CVS -x 'bigdif*' -x autom4te.cache ../wine.test/dlls/rpcrt4/tests/Makefile.in ./dlls/rpcrt4/tests/Makefile.in
--- ../wine.test/dlls/rpcrt4/tests/Makefile.in 2003-01-14 23:45:29.000000000 -0600
+++ ./dlls/rpcrt4/tests/Makefile.in 2003-01-19 21:54:42.000000000 -0600
@@ -3,10 +3,12 @@
SRCDIR = @srcdir@
VPATH = @srcdir@
TESTDLL = rpcrt4.dll
-IMPORTS = rpcrt4
+IMPORTS = rpcrt4 ntdll
CTESTS = \
- rpc.c
+ rpc.c \
+ stringinput_ppc_c.c \
+ stringinput_x86_c.c
@MAKE_TEST_RULES@
diff -ur -x CVS -x 'bigdif*' -x autom4te.cache ../wine.test/dlls/rpcrt4/tests/rpc.c ./dlls/rpcrt4/tests/rpc.c
--- ../wine.test/dlls/rpcrt4/tests/rpc.c 2003-01-14 23:45:29.000000000 -0600
+++ ./dlls/rpcrt4/tests/rpc.c 2003-01-19 22:52:17.000000000 -0600
@@ -18,14 +18,27 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#include <assert.h>
#include "wine/test.h"
#include <winbase.h>
#include <winnt.h>
#include <winerror.h>
+#include <stdio.h>
#include "wine/unicode.h"
#include "rpc.h"
+#include "stringinput.h"
+#include "widl_scraps.h"
+
+/* appease testlist.c */
+void func_stringinput_x86_c(void) { }
+void func_stringinput_ppc_c(void) { }
+
+/***************************************************************
+ * UUID Tests
+ */
+
static UUID Uuid_Table[10] = {
{ 0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} }, /* 0 (null) */
{ 0xdeadbeef, 0xdead, 0xbeef, {0x10, 0x21, 0x35, 0x56, 0x89, 0xa0, 0xf4, 0x8a} }, /* 1 */
@@ -119,8 +132,127 @@
}
}
+/*************************************************************
+ * StringInput tests
+ */
+
+#include "RC.h"
+
+unsigned int sRCIndex;
+
+void *__RPC_USER MIDL_user_allocate(size_t size)
+{
+ trace ( "Wow, __MIDL_user_allocate was called.\n" );
+ return malloc(size);
+}
+
+void __RPC_USER MIDL_user_free(void *ptr)
+{
+ trace ( "Wow, __MIDL_user_free was called.\n" );
+ free(ptr);
+}
+
+void doStringInputClient(char *pszProtocolSequence)
+{
+ #if defined( __RPC_WIN32__ ) || ( defined( __RPC_MAC__ ) && defined( _MPPC_ ) )
+ UINT32 status;
+ LPSTR pszStringBinding;
+ char *theMessage;
+ unsigned int cRCIndex;
+
+ trace( "String Input Client is running with PS %s.\n", pszProtocolSequence );
+
+ /* prepare ourselves to be the client */
+ status = RpcStringBindingComposeA(0, pszProtocolSequence, NULL, NULL, 0, &pszStringBinding);
+ ok( (!status), "RpcStringBindingCompose failed");
+
+ status = RpcBindingFromStringBindingA(pszStringBinding, &stringinput_binding_handle);
+
+ ok( (!status), "RpcBindingFromStringBinding failed");
+
+ status = RpcStringFreeA((unsigned char**)&pszStringBinding);
+ ok( (!status), "RpcStringFree failed");
+
+ for (cRCIndex = 0; cRCIndex < RCCount; cRCIndex++) {
+ theMessage = (char *)RandomCruds[cRCIndex];
+
+ /* hmm, perhaps StringReceive was not such a smart name...
+ here we are /sending/ the string. */
+ StringReceive(theMessage);
+ }
+
+ ShutdownServer();
+
+ status = RpcBindingFree(&stringinput_binding_handle);
+ ok( (!status), "RpcBindingFree failed");
+ #endif /* __RPC_WIN32__ || ( __RPC_MAC__ && _MPPC_ ) */
+}
+
+#define HUGE_PATH 2000
+
+/* here we define all the protocol sequences RPC currently works with. */
+static const int SPSCount = 1;
+static const char *SupportedProtocolSequences[] = {
+ "ncalrpc"
+};
+
+/* this test implements the server side of the stringinput rpc server;
+ * it spawns the client side as a separate process (same exe).
+ */
+void StringInputViaRPC()
+{
+ #if defined( __RPC_WIN32__ ) || ( defined( __RPC_MAC__ ) && defined( _MPPC_ ) )
+ const char *ForcePath = "..\\..\\..\\programs\\rpcss";
+ UINT32 status;
+ unsigned char *pszProtocolSequence;
+ unsigned int PSIndex;
+ char buffer[HUGE_PATH], buffer2[HUGE_PATH];
+ PROCESS_INFORMATION info;
+ STARTUPINFOA si;
+
+ /* set the PATH environment variable to ensure we test from the build tree */
+ ZeroMemory(buffer, HUGE_PATH);
+ ZeroMemory(buffer2, HUGE_PATH);
+ if ((status = GetEnvironmentVariableA("PATH", buffer, HUGE_PATH)) > 0) {
+ /* if this fails, you are probably a PATH abuser. trim it down. */
+ assert((status + strlen(ForcePath) + 2) < HUGE_PATH);
+ sprintf(buffer2, "%s;%s", ForcePath, buffer);
+ SetEnvironmentVariableA("PATH", buffer2);
+ } else {
+ SetEnvironmentVariableA("PATH", ForcePath);
+ }
+ ZeroMemory(buffer, HUGE_PATH);
+
+ for (PSIndex = 0; PSIndex < SPSCount; PSIndex++) {
+ pszProtocolSequence = (unsigned char *)SupportedProtocolSequences[PSIndex];
+
+ /* spawn the stringinput client process (ourselves, with different arguments) */
+ memset(&si, 0, sizeof(si));
+ si.cb = sizeof(si);
+ sprintf(buffer, "stringinput_server\\stringinput_server.exe.so %s", pszProtocolSequence);
+ ok(CreateProcessA(NULL, buffer, NULL, NULL, TRUE, 0L, NULL, NULL, &si, &info), "CreateProcess");
+
+ /* give it "plenty" of time to start up (TODO: find a better way) */
+ Sleep(5000);
+
+ doStringInputClient(pszProtocolSequence);
+
+ /* make sure the server process shut down and succeeded */
+ ok(WaitForSingleObject(info.hProcess, 10000) == WAIT_OBJECT_0, "Child process termination");
+
+ GetExitCodeProcess(info.hProcess, (LPDWORD)&status);
+ ok( (!status), "server process failed: %u", status );
+
+ CloseHandle(info.hProcess);
+ CloseHandle(info.hThread);
+ }
+ #endif /* __RPC_WIN32__ || ( __RPC_MAC__ && _MPPC_ ) */
+}
+
START_TEST( rpc )
{
trace ( " ** Uuid Conversion and Comparison Tests **\n" );
UuidConversionAndComparison();
+ trace ( " ** StringInput via RPC Tests **\n" );
+ StringInputViaRPC();
}
diff -ur -x CVS -x 'bigdif*' -x autom4te.cache ../wine.test/include/rpc.h ./include/rpc.h
--- ../wine.test/include/rpc.h 2003-01-15 20:50:29.000000000 -0600
+++ ./include/rpc.h 2003-01-19 21:54:42.000000000 -0600
@@ -25,8 +25,9 @@
#ifndef __WINE_RPC_H
#define __WINE_RPC_H
-#if defined(__PPC__) || defined(_MAC) /* ? */
+#if defined(__PPC__) /* ? */
#define __RPC_MAC__
+ #define _MPPC_ /* FIXME: does this really belong here? */
#elif defined(_WIN64)
#define __RPC_WIN64__
#else
diff -ur -x CVS -x 'bigdif*' -x autom4te.cache ../wine.test/include/rpcdce.h ./include/rpcdce.h
--- ../wine.test/include/rpcdce.h 2003-01-03 19:32:52.000000000 -0600
+++ ./include/rpcdce.h 2003-01-19 21:54:42.000000000 -0600
@@ -282,6 +282,9 @@
RPCRTAPI int RPC_ENTRY
UuidIsNil( UUID* Uuid, RPC_STATUS* Status_ );
+RPCRTAPI void RPC_ENTRY
+ RpcRaiseException( RPC_STATUS exception );
+
#include "rpcdcep.h"
#endif /*__WINE_RPCDCE_H */
diff -ur -x CVS -x 'bigdif*' -x autom4te.cache ../wine.test/include/rpcndr.h ./include/rpcndr.h
--- ../wine.test/include/rpcndr.h 2003-01-14 23:45:29.000000000 -0600
+++ ./include/rpcndr.h 2003-01-19 21:54:42.000000000 -0600
@@ -18,7 +18,7 @@
#ifndef __RPCNDR_H_VERSION__
/* FIXME: What version? Perhaps something is better than nothing, however incorrect */
-#define __RPCNDR_H_VERSION__ ( 399 )
+#define __RPCNDR_H_VERSION__ ( 440 )
#endif
#ifndef __WINE_RPCNDR_H
@@ -81,6 +81,13 @@
#define NDR_LOCAL_ENDIAN ((unsigned long) __NDR_LOCAL_ENDIAN)
+#define RPC_BAD_STUB_DATA_EXCEPTION_FILTER ( \
+ (RpcExceptionCode()==STATUS_ACCESS_VIOLATION) || \
+ (RpcExceptionCode()==STATUS_DATATYPE_MISALIGNMENT) || \
+ (RpcExceptionCode()==RPC_X_BAD_STUB_DATA) || \
+ (RpcExceptionCode()==RPC_S_INVALID_BOUND) \
+)
+
#define TARGET_IS_NT50_OR_LATER 1
#define TARGET_IS_NT40_OR_LATER 1
#define TARGET_IS_NT351_OR_WIN95_OR_LATER 1
@@ -95,6 +102,10 @@
#define __RPC_CALLEE WINAPI
#define RPC_VAR_ENTRY WINAPIV
+#define NdrFcShort(s) (unsigned char)(s & 0xff), (unsigned char)(s >> 8)
+#define NdrFcLong(s) (unsigned char)(s & 0xff), (unsigned char)((s & 0x0000ff00) >> 8), \
+ (unsigned char)((s & 0x00ff0000) >> 16), (unsigned char)(s >> 24)
+
typedef struct
{
void *pad[2];
--- /dev/null 2002-11-28 07:03:29.000000000 -0600
+++ ./dlls/rpcrt4/tests/RC.h 2003-01-19 22:52:04.000000000 -0600
@@ -0,0 +1,85 @@
+/*
+ * Unit test suite for rpc functions
+ *
+ * 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
+ */
+
+#ifndef __RNDCRD_H_
+#define __RNDCRD_H_
+
+#include <winnt.h>
+
+static const int RCCount = 10;
+static const char *RandomCruds[] = {
+ "This is just some random crud",
+ "Designed \r\n to \r\n test \n",
+ "098172365 the RPC capabilities",
+ "!#$^*@%$*()*)",
+ "of this thing.\n",
+ "x",
+ "blabalbablab ablab abla",
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCDE30"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCD29"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABC28"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzAB27"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABC26"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCD25"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCDE24"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCDE23"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCD22"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABC21"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzAB20"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABC19"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCD18"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCDE17"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCD16"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABC15"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzAB14"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABC13"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCD12"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCDE11"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCDE10"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCDEF9"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCDEF8"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCDEF7"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCDEF6"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCDEF5"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCDEF4"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCDEF3"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCDEF2"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCDEF1"
+ "<><><><><,.,.____&&&&&&_+-=_+-=_+jjjjjjj,.,.,><><><>,.,.<><????????abcdefghijklmnopqrstuvwxyzABCDEF0",
+ "",
+ "\001\002\003\004\005\006\007\008\009\010\011\012\013\014\015\016"
+ "\017\018\019\020\021\022\023\024\025\026\027\028\029\030\031\032"
+ "\033\034\035\036\037\038\039\040\041\042\043\044\045\046\047\048"
+ "\049\050\051\052\053\054\055\056\057\058\059\060\061\062\063\064"
+ "\065\066\067\068\069\070\071\072\073\074\075\076\077\078\079\080"
+ "\081\082\083\084\085\086\087\088\089\090\091\092\093\094\095\096"
+ "\097\098\099\100\101\102\103\104\105\106\107\108\109\110\111\112"
+ "\113\114\115\116\117\118\119\120\121\122\123\124\125\126\127\128"
+ "\129\130\131\132\133\134\135\136\137\138\139\140\141\142\143\144"
+ "\145\146\147\148\149\150\151\152\153\154\155\156\157\158\159\160"
+ "\161\162\163\164\165\166\167\168\169\170\171\172\173\174\175\176"
+ "\177\178\179\180\181\182\183\184\185\186\187\188\189\190\191\192"
+ "\193\194\195\196\197\198\199\200\201\202\203\204\205\206\207\208"
+ "\209\210\211\212\213\214\215\216\217\218\219\220\221\222\223\224"
+ "\225\226\227\228\229\230\231\232\233\234\235\236\237\238\239\240"
+ "\241\242\243\244\245\246\247\248\249\250\251\252\253\254\255"
+};
+
+#endif /* __RNDCRD_ */
--- /dev/null 2002-11-28 07:03:29.000000000 -0600
+++ ./dlls/rpcrt4/tests/gen.sh 2003-01-19 21:54:42.000000000 -0600
@@ -0,0 +1,72 @@
+#/bin/bash
+
+echorun() \
+{ \
+ echo '>>>' $@ && \
+ (echo " $@ " | bash -C -)
+}
+echorunsimple() \
+{ \
+ echo '>>>' $@ && \
+ $@
+}
+
+domidl() \
+{ \
+ echo '*' && \
+ echo '* generating' $1_$2 stub/proxy && \
+ echo '*' && \
+ echorun rm -rvf $1'_server/'$1'_'$2'_s.c' './'$1'_'$2'_c.c' workdir && \
+ echorun mkdir workdir && \
+ echorunsimple cd workdir && \
+ echorun cp -v ../$1.{idl,acf} .
+ echorun wine --debugmsg -all cmd /c ..\\\\midlbat.bat /$3 $5 $6 $7 $8 $9 $1.idl && \
+ echorun dos2unix $1'_'{s,c}.c && \
+ echorun 'echo "#include \"rpc.h\"" >' $1'_'c.c.tmp && \
+ echorun 'echo "#include \"rpc.h\"" >' $1'_'s.c.tmp && \
+ echorun 'echo "#if defined(' $4 ')" >>' $1'_'c.c.tmp && \
+ echorun 'echo "#if defined(' $4 ')" >>' $1'_'s.c.tmp && \
+ echorun 'echo "#include \"widl_scraps.h\"" >>' $1'_'c.c.tmp && \
+ echorun 'echo "#include \"widl_scraps.h\"" >>' $1'_'s.c.tmp && \
+ echorun 'cat' $1'_c.c >>' $1'_'c.c.tmp &&
+ echorun 'cat' $1'_s.c >>' $1'_'s.c.tmp &&
+ echorun 'echo "#endif" /\*' $4 '\*/ >>' $1'_'c.c.tmp && \
+ echorun 'echo "#endif" /\*' $4 '\*/ >>' $1'_'s.c.tmp && \
+ echorun mv -v $1'_'c.c.tmp ../$1'_'$2'_c.c' && \
+ echorun mv -v $1'_'s.c.tmp ../$1'_server/'$1'_'$2'_s.c' && \
+ echorunsimple cd .. && \
+ echorun rm -rvf workdir
+}
+
+widlmidl() \
+{ \
+ domidl $1 x86 win32 __RPC_WIN32__ $2 $3 $4 $5 $6 && \
+ domidl $1 ppc powermac __RPC_MAC__ $2 $3 $4 $5 $6 && \
+ echorun rm -vf $1.h && \
+ echorun widl $1.idl
+}
+
+echo '*'
+echo '* gen.sh: bash script Used by Greg to generate stringinput_c.c, stringinput_s.c.'
+echo '* Requires a working MIDL and undocumented environment variables and other stuff.'
+echo '* FIXME: Due to some unidentified bug, wcmd (the wrapper) /c doesnt work yet, missing'
+echo '* several of the command-line parameters I try to pass it. Probably I just did something'
+echo '* stupid, but for now, I use native "cmd" to process the batch file. This also'
+echo '* requires at least a working midl.exe and "c:\windows\system\vcvars32.bat", and'
+echo '* something called "dos2unix". Of course, it also requires for wine to be installed.'
+echo '*'
+echo '* TODO: teach widl how to generate the stringinput_{c,s}.c and integrate properly with autothingies'
+echo '*'
+echo '!!!!! This will probably break your wine'
+echo '!!!!! (or your hardware, for all I know)'
+echo '!!!!!'
+echo '!!!!! ************************'
+echo '!!!!! *** PRESS ^C NOW !!! ***'
+echo '!!!!! ************************'
+echo '*'
+echorun sleep 10 && \
+widlmidl stringinput /no_format_opt && \
+echo '*' && \
+echo '* Done' && \
+echo '*'
+
--- /dev/null 2002-11-28 07:03:29.000000000 -0600
+++ ./dlls/rpcrt4/tests/midlbat.bat 2003-01-19 21:54:42.000000000 -0600
@@ -0,0 +1,4 @@
+echo off
+echo (MIDLBAT.BAT... - expects to find C:\windows\system\vcvars32.bat!!)
+call C:\windows\system\vcvars32.bat
+midl %1 %2 %3 %4 %5 %6 %7 %8 %9
--- /dev/null 2002-11-28 07:03:29.000000000 -0600
+++ ./dlls/rpcrt4/tests/stringinput.acf 2003-01-19 21:54:42.000000000 -0600
@@ -0,0 +1,4 @@
+[ implicit_handle(handle_t stringinput_binding_handle) ]
+interface stringinput
+{
+}
--- /dev/null 2002-11-28 07:03:29.000000000 -0600
+++ ./dlls/rpcrt4/tests/stringinput.h 2003-01-19 21:54:42.000000000 -0600
@@ -0,0 +1,24 @@
+/*** Autogenerated by WIDL 0.1 from stringinput.idl - Do not edit ***/
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __WIDL_STRINGINPUT_H
+#define __WIDL_STRINGINPUT_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*****************************************************************************
+ * stringinput interface (v1.0)
+ */
+DEFINE_GUID(IID_stringinput, 0xcdf93a7e, 0x2622, 0x4ede, 0x99,0xb3, 0xaa,0x4a,0x0d,0xac,0x86,0x15);
+extern RPC_IF_HANDLE stringinput_v1_0_c_ifspec;
+extern RPC_IF_HANDLE stringinput_v1_0_s_ifspec;
+void StringReceive(
+ unsigned char* thestring);
+void ShutdownServer(
+ );
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __WIDL_STRINGINPUT_H */
--- /dev/null 2002-11-28 07:03:29.000000000 -0600
+++ ./dlls/rpcrt4/tests/stringinput.idl 2003-01-19 21:54:42.000000000 -0600
@@ -0,0 +1,15 @@
+/*
+ * this defines a super-simple RPC service which passes a
+ * single string to the server and returns nothing.
+ */
+
+[
+ uuid(cdf93a7e-2622-4ede-99b3-aa4a0dac8615),
+ version(1.0)
+]
+
+interface stringinput
+{
+void StringReceive([in, string, ref] unsigned char *thestring);
+void ShutdownServer(void);
+}
--- /dev/null 2002-11-28 07:03:29.000000000 -0600
+++ ./dlls/rpcrt4/tests/stringinput_ppc_c.c 2003-01-19 21:54:42.000000000 -0600
@@ -0,0 +1,214 @@
+#include "rpc.h"
+#if defined( __RPC_MAC__ )
+#include "widl_scraps.h"
+/* this ALWAYS GENERATED file contains the RPC client stubs */
+
+
+/* File created by MIDL compiler version 5.01.0164 */
+/* at Sun Jan 19 20:47:16 2003
+ */
+/* Compiler settings for stringinput.idl:
+ Os (OptLev=s), W1, Zp2, env=PowerMac, ms_ext, c_ext
+ error checks: allocation ref bounds_check enum stub_data , no_format_optimization
+*/
+//@@MIDL_FILE_HEADING( )
+
+#include <string.h>
+#if defined( _ALPHA_ )
+#include <stdarg.h>
+#endif
+
+#include "stringinput.h"
+
+#define TYPE_FORMAT_STRING_SIZE 7
+#define PROC_FORMAT_STRING_SIZE 9
+
+typedef struct _MIDL_TYPE_FORMAT_STRING
+ {
+ short Pad;
+ unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
+ } MIDL_TYPE_FORMAT_STRING;
+
+typedef struct _MIDL_PROC_FORMAT_STRING
+ {
+ short Pad;
+ unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
+ } MIDL_PROC_FORMAT_STRING;
+
+
+extern const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString;
+extern const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString;
+
+/* Standard interface: stringinput, ver. 1.0,
+ GUID={0xcdf93a7e,0x2622,0x4ede,{0x99,0xb3,0xaa,0x4a,0x0d,0xac,0x86,0x15}} */
+
+handle_t stringinput_binding_handle;
+
+
+static const RPC_CLIENT_INTERFACE stringinput___RpcClientInterface =
+ {
+ sizeof(RPC_CLIENT_INTERFACE),
+ {{0xcdf93a7e,0x2622,0x4ede,{0x99,0xb3,0xaa,0x4a,0x0d,0xac,0x86,0x15}},{1,0}},
+ {{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}},
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ };
+RPC_IF_HANDLE stringinput_v1_0_c_ifspec = (RPC_IF_HANDLE)& stringinput___RpcClientInterface;
+
+extern const MIDL_STUB_DESC stringinput_StubDesc;
+
+static RPC_BINDING_HANDLE stringinput__MIDL_AutoBindHandle;
+
+
+void StringReceive(
+ /* [ref][string][in] */ unsigned char __RPC_FAR *thestring)
+{
+
+ RPC_BINDING_HANDLE _Handle = 0;
+
+ RPC_MESSAGE _RpcMessage;
+
+ MIDL_STUB_MESSAGE _StubMsg;
+
+ if(!thestring)
+ {
+ RpcRaiseException(RPC_X_NULL_REF_POINTER);
+ }
+ RpcTryFinally
+ {
+ NdrClientInitializeNew(
+ ( PRPC_MESSAGE )&_RpcMessage,
+ ( PMIDL_STUB_MESSAGE )&_StubMsg,
+ ( PMIDL_STUB_DESC )&stringinput_StubDesc,
+ 0);
+
+
+ _Handle = stringinput_binding_handle;
+
+
+ _StubMsg.BufferLength = 12U;
+ NdrConformantStringBufferSize( (PMIDL_STUB_MESSAGE) &_StubMsg,
+ (unsigned char __RPC_FAR *)thestring,
+ (PFORMAT_STRING) &__MIDL_TypeFormatString.Format[4] );
+
+ NdrGetBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg, _StubMsg.BufferLength, _Handle );
+
+ NdrConformantStringMarshall( (PMIDL_STUB_MESSAGE)& _StubMsg,
+ (unsigned char __RPC_FAR *)thestring,
+ (PFORMAT_STRING) &__MIDL_TypeFormatString.Format[4] );
+
+ NdrSendReceive( (PMIDL_STUB_MESSAGE) &_StubMsg, (unsigned char __RPC_FAR *) _StubMsg.Buffer );
+
+ }
+ RpcFinally
+ {
+ NdrFreeBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg );
+
+ }
+ RpcEndFinally
+
+}
+
+
+void ShutdownServer( void)
+{
+
+ RPC_BINDING_HANDLE _Handle = 0;
+
+ RPC_MESSAGE _RpcMessage;
+
+ MIDL_STUB_MESSAGE _StubMsg;
+
+ RpcTryFinally
+ {
+ NdrClientInitializeNew(
+ ( PRPC_MESSAGE )&_RpcMessage,
+ ( PMIDL_STUB_MESSAGE )&_StubMsg,
+ ( PMIDL_STUB_DESC )&stringinput_StubDesc,
+ 1);
+
+
+ _Handle = stringinput_binding_handle;
+
+
+ _StubMsg.BufferLength = 0U;
+ NdrGetBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg, _StubMsg.BufferLength, _Handle );
+
+ NdrSendReceive( (PMIDL_STUB_MESSAGE) &_StubMsg, (unsigned char __RPC_FAR *) _StubMsg.Buffer );
+
+ }
+ RpcFinally
+ {
+ NdrFreeBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg );
+
+ }
+ RpcEndFinally
+
+}
+
+
+static const MIDL_STUB_DESC stringinput_StubDesc =
+ {
+ (void __RPC_FAR *)& stringinput___RpcClientInterface,
+ MIDL_user_allocate,
+ MIDL_user_free,
+ &stringinput_binding_handle,
+ 0,
+ 0,
+ 0,
+ 0,
+ __MIDL_TypeFormatString.Format,
+ 1, /* -error bounds_check flag */
+ 0x10001, /* Ndr library version */
+ 0,
+ 0x50100a4, /* MIDL Version 5.1.164 */
+ 0,
+ 0,
+ 0, /* notify & notify_flag routine table */
+ 1, /* Flags */
+ 0, /* Reserved3 */
+ 0, /* Reserved4 */
+ 0 /* Reserved5 */
+ };
+
+#if !defined(__RPC_MAC__) || !defined(_MPPC_)
+#error Invalid build platform for this stub.
+#endif
+
+static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString =
+ {
+ 0,
+ {
+
+ 0x4d, /* FC_IN_PARAM */
+ 0x1, /* Stack size = 1 */
+
+/* 2 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
+/* 4 */ 0x5b, /* FC_END */
+ 0x5c, /* FC_PAD */
+/* 6 */ 0x5b, /* FC_END */
+ 0x5c, /* FC_PAD */
+
+ 0x0
+ }
+ };
+
+static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString =
+ {
+ 0,
+ {
+ NdrFcShort( 0x0 ), /* 0 */
+/* 2 */
+ 0x11, 0x8, /* FC_RP [simple_pointer] */
+/* 4 */
+ 0x22, /* FC_C_CSTRING */
+ 0x5c, /* FC_PAD */
+
+ 0x0
+ }
+ };
+#endif /* __RPC_MAC__ */
--- /dev/null 2002-11-28 07:03:29.000000000 -0600
+++ ./dlls/rpcrt4/tests/stringinput_server/Makefile.in 2003-01-19 21:54:42.000000000 -0600
@@ -0,0 +1,18 @@
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../../../..
+SRCDIR = @srcdir@
+VPATH = @srcdir@
+MODULE = stringinput_server.exe
+APPMODE = cui
+EXTRAINCL = -I..
+IMPORTS = ntdll kernel32 rpcrt4
+
+C_SRCS = \
+ stringinput_manager.c \
+ stringinput_ppc_s.c \
+ stringinput_server_main.c \
+ stringinput_x86_s.c
+
+ at MAKE_PROG_RULES@
+
+### Dependencies:
--- /dev/null 2002-11-28 07:03:29.000000000 -0600
+++ ./dlls/rpcrt4/tests/stringinput_server/stringinput_manager.c 2003-01-19 22:52:47.000000000 -0600
@@ -0,0 +1,76 @@
+/*
+ * Unit test suite for rpc functions
+ *
+ * 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
+ */
+
+#include <assert.h>
+#include <winbase.h>
+#include <winnt.h>
+#include <winerror.h>
+#include <stdio.h>
+
+#include "wine/unicode.h"
+#include "rpc.h"
+
+#include "stringinput.h"
+#include "widl_scraps.h"
+
+static unsigned int sRCIndex;
+static BOOL didfail;
+BOOL DidFail() { return didfail; }
+
+#define HUGE_PATH 2000
+
+#include "RC.h"
+
+void *__RPC_USER MIDL_user_allocate(size_t size)
+{
+ fprintf(stderr, "Wow, __MIDL_user_allocate was called.\n" );
+ return malloc(size);
+}
+
+void __RPC_USER MIDL_user_free(void *ptr)
+{
+ fprintf(stderr, "Wow, __MIDL_user_free was called.\n" );
+ free(ptr);
+}
+
+
+/* StringInput "manager" routines (server-side implementations) */
+void StringReceive(unsigned char *msg)
+{
+ printf("received message: checking string %d\n", sRCIndex);
+ if (sRCIndex >= RCCount) {
+ fprintf(stderr, "RCCount limit\n");
+ didfail = TRUE;
+ } else if (strcmp(msg, RandomCruds[sRCIndex++])) {
+ fprintf(stderr, "Crud mismatch\n");
+ didfail = TRUE;
+ }
+}
+
+void ShutdownServer()
+{
+ UINT32 status;
+ printf("Shutdown request received.\n");
+ status = RpcMgmtStopServerListening(0);
+ if (status) {
+ fprintf(stderr, "RpcMgmtStopServerListening failed\n");
+ didfail = TRUE;
+ }
+}
--- /dev/null 2002-11-28 07:03:29.000000000 -0600
+++ ./dlls/rpcrt4/tests/stringinput_server/stringinput_ppc_s.c 2003-01-19 21:54:42.000000000 -0600
@@ -0,0 +1,222 @@
+#include "rpc.h"
+#if defined( __RPC_MAC__ )
+#include "widl_scraps.h"
+/* this ALWAYS GENERATED file contains the RPC server stubs */
+
+
+/* File created by MIDL compiler version 5.01.0164 */
+/* at Sun Jan 19 20:47:16 2003
+ */
+/* Compiler settings for stringinput.idl:
+ Os (OptLev=s), W1, Zp2, env=PowerMac, ms_ext, c_ext
+ error checks: allocation ref bounds_check enum stub_data , no_format_optimization
+*/
+//@@MIDL_FILE_HEADING( )
+
+#include <string.h>
+#include "stringinput.h"
+
+#define TYPE_FORMAT_STRING_SIZE 7
+#define PROC_FORMAT_STRING_SIZE 9
+
+typedef struct _MIDL_TYPE_FORMAT_STRING
+ {
+ short Pad;
+ unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
+ } MIDL_TYPE_FORMAT_STRING;
+
+typedef struct _MIDL_PROC_FORMAT_STRING
+ {
+ short Pad;
+ unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
+ } MIDL_PROC_FORMAT_STRING;
+
+extern const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString;
+extern const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString;
+
+/* Standard interface: stringinput, ver. 1.0,
+ GUID={0xcdf93a7e,0x2622,0x4ede,{0x99,0xb3,0xaa,0x4a,0x0d,0xac,0x86,0x15}} */
+
+
+extern RPC_DISPATCH_TABLE stringinput_v1_0_DispatchTable;
+
+static const RPC_SERVER_INTERFACE stringinput___RpcServerInterface =
+ {
+ sizeof(RPC_SERVER_INTERFACE),
+ {{0xcdf93a7e,0x2622,0x4ede,{0x99,0xb3,0xaa,0x4a,0x0d,0xac,0x86,0x15}},{1,0}},
+ {{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}},
+ &stringinput_v1_0_DispatchTable,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ };
+RPC_IF_HANDLE stringinput_v1_0_s_ifspec = (RPC_IF_HANDLE)& stringinput___RpcServerInterface;
+
+extern const MIDL_STUB_DESC stringinput_StubDesc;
+
+void __RPC_STUB
+stringinput_StringReceive(
+ PRPC_MESSAGE _pRpcMessage )
+{
+ MIDL_STUB_MESSAGE _StubMsg;
+ unsigned char __RPC_FAR *thestring;
+ RPC_STATUS _Status;
+
+ ((void)(_Status));
+ NdrServerInitializeNew(
+ _pRpcMessage,
+ &_StubMsg,
+ &stringinput_StubDesc);
+
+ ( unsigned char __RPC_FAR * )thestring = 0;
+ RpcTryFinally
+ {
+ RpcTryExcept
+ {
+ if ( (_pRpcMessage->DataRepresentation & 0X0000FFFFUL) != NDR_LOCAL_DATA_REPRESENTATION )
+ NdrConvert( (PMIDL_STUB_MESSAGE) &_StubMsg, (PFORMAT_STRING) &__MIDL_ProcFormatString.Format[0] );
+
+ NdrConformantStringUnmarshall( (PMIDL_STUB_MESSAGE) &_StubMsg,
+ (unsigned char __RPC_FAR * __RPC_FAR *)&thestring,
+ (PFORMAT_STRING) &__MIDL_TypeFormatString.Format[4],
+ (unsigned char)0 );
+
+ if(_StubMsg.Buffer > _StubMsg.BufferEnd)
+ {
+ RpcRaiseException(RPC_X_BAD_STUB_DATA);
+ }
+ }
+ RpcExcept( RPC_BAD_STUB_DATA_EXCEPTION_FILTER )
+ {
+ RpcRaiseException(RPC_X_BAD_STUB_DATA);
+ }
+ RpcEndExcept
+
+ StringReceive(thestring);
+
+ }
+ RpcFinally
+ {
+ }
+ RpcEndFinally
+ _pRpcMessage->BufferLength =
+ (unsigned int)((long)_StubMsg.Buffer - (long)_pRpcMessage->Buffer);
+
+}
+
+void __RPC_STUB
+stringinput_ShutdownServer(
+ PRPC_MESSAGE _pRpcMessage )
+{
+ MIDL_STUB_MESSAGE _StubMsg;
+ RPC_STATUS _Status;
+
+ ((void)(_Status));
+ NdrServerInitializeNew(
+ _pRpcMessage,
+ &_StubMsg,
+ &stringinput_StubDesc);
+
+ RpcTryFinally
+ {
+ RpcTryExcept
+ {
+ if(_StubMsg.Buffer > _StubMsg.BufferEnd)
+ {
+ RpcRaiseException(RPC_X_BAD_STUB_DATA);
+ }
+ }
+ RpcExcept( RPC_BAD_STUB_DATA_EXCEPTION_FILTER )
+ {
+ RpcRaiseException(RPC_X_BAD_STUB_DATA);
+ }
+ RpcEndExcept
+
+ ShutdownServer();
+
+ }
+ RpcFinally
+ {
+ }
+ RpcEndFinally
+ _pRpcMessage->BufferLength =
+ (unsigned int)((long)_StubMsg.Buffer - (long)_pRpcMessage->Buffer);
+
+}
+
+
+static const MIDL_STUB_DESC stringinput_StubDesc =
+ {
+ (void __RPC_FAR *)& stringinput___RpcServerInterface,
+ MIDL_user_allocate,
+ MIDL_user_free,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ __MIDL_TypeFormatString.Format,
+ 1, /* -error bounds_check flag */
+ 0x10001, /* Ndr library version */
+ 0,
+ 0x50100a4, /* MIDL Version 5.1.164 */
+ 0,
+ 0,
+ 0, /* notify & notify_flag routine table */
+ 1, /* Flags */
+ 0, /* Reserved3 */
+ 0, /* Reserved4 */
+ 0 /* Reserved5 */
+ };
+
+static RPC_DISPATCH_FUNCTION stringinput_table[] =
+ {
+ stringinput_StringReceive,
+ stringinput_ShutdownServer,
+ 0
+ };
+RPC_DISPATCH_TABLE stringinput_v1_0_DispatchTable =
+ {
+ 2,
+ stringinput_table
+ };
+
+#if !defined(__RPC_MAC__) || !defined(_MPPC_)
+#error Invalid build platform for this stub.
+#endif
+
+static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString =
+ {
+ 0,
+ {
+
+ 0x4d, /* FC_IN_PARAM */
+ 0x1, /* Stack size = 1 */
+
+/* 2 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
+/* 4 */ 0x5b, /* FC_END */
+ 0x5c, /* FC_PAD */
+/* 6 */ 0x5b, /* FC_END */
+ 0x5c, /* FC_PAD */
+
+ 0x0
+ }
+ };
+
+static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString =
+ {
+ 0,
+ {
+ NdrFcShort( 0x0 ), /* 0 */
+/* 2 */
+ 0x11, 0x8, /* FC_RP [simple_pointer] */
+/* 4 */
+ 0x22, /* FC_C_CSTRING */
+ 0x5c, /* FC_PAD */
+
+ 0x0
+ }
+ };
+#endif /* __RPC_MAC__ */
--- /dev/null 2002-11-28 07:03:29.000000000 -0600
+++ ./dlls/rpcrt4/tests/stringinput_server/stringinput_server_main.c 2003-01-19 21:54:42.000000000 -0600
@@ -0,0 +1,104 @@
+/*
+ * Unit test suite for rpc functions
+ *
+ * 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
+ */
+
+#include <assert.h>
+#include <winbase.h>
+#include <winnt.h>
+#include <winerror.h>
+#include <stdio.h>
+
+#include "rpc.h"
+
+#include "stringinput.h"
+#include "widl_scraps.h"
+
+extern BOOL DidFail();
+
+/* implements the server side of the stringinput rpc server;
+ * it spawns the client side as a separate process (same exe).
+ */
+int main(int argc, char *argv[])
+{
+ #if defined( __RPC_WIN32__ ) || ( defined( __RPC_MAC__ ) && defined( _MPPC_ ) )
+
+ unsigned int MaxCalls = 50;
+ UINT32 status;
+ unsigned char *pszProtocolSequence;
+ RPC_BINDING_VECTOR *pbvBindings;
+
+ assert(argc > 1);
+ pszProtocolSequence = argv[1];
+
+ /* ready the stringinput server */
+ status = RpcServerUseProtseq(pszProtocolSequence, MaxCalls ,0);
+ if (status) {
+ fprintf(stderr, "RpcServerUseProtseq failed\n");
+ ExitProcess(2);
+ }
+
+ status = RpcServerInqBindings(&pbvBindings);
+ if(status) {
+ fprintf(stderr, "RpcServerInqBindings failed\n");
+ ExitProcess(3);
+ }
+
+ status = RpcEpRegister(stringinput_v1_0_s_ifspec, pbvBindings, 0, 0);
+ if (status) {
+ fprintf(stderr, "RpcEpRegister failed\n");
+ ExitProcess(4);
+ }
+
+ status = RpcServerRegisterIf(stringinput_v1_0_s_ifspec, 0, 0);
+ if (status) {
+ fprintf(stderr, "RpcServerRegisterIf failed\n");
+ ExitProcess(5);
+ }
+
+ /* start stringinput services. termination should occur due to a call from the client */
+ status = RpcServerListen(1, MaxCalls, 0);
+ if (status) {
+ fprintf(stderr, "RpcServerListen failed\n");
+ ExitProcess(6);
+ }
+
+ /* shut down stringinput server */
+ status = RpcServerUnregisterIf(stringinput_v1_0_s_ifspec, 0, 0);
+ if (status) {
+ fprintf(stderr, "RpcServerUnregisterIf failed\n");
+ ExitProcess(7);
+ }
+
+ status = RpcEpUnregister(stringinput_v1_0_s_ifspec, pbvBindings, 0);
+ if (status) {
+ fprintf(stderr, "RpcEpUnregister failed\n");
+ ExitProcess(8);
+ }
+
+ status = RpcBindingVectorFree(&pbvBindings);
+ if (status) {
+ fprintf(stderr, "RpcBindingVectorFree failed\n");
+ ExitProcess(9);
+ }
+ if (DidFail())
+ ExitProcess(10);
+
+ #endif /* __RPC_WIN32__ || ( __RPC_MAC__ && _MPPC_ ) */
+ return 0;
+}
--- /dev/null 2002-11-28 07:03:29.000000000 -0600
+++ ./dlls/rpcrt4/tests/stringinput_server/stringinput_x86_s.c 2003-01-19 21:54:42.000000000 -0600
@@ -0,0 +1,225 @@
+#include "rpc.h"
+#if defined( __RPC_WIN32__ )
+#include "widl_scraps.h"
+/* this ALWAYS GENERATED file contains the RPC server stubs */
+
+
+/* File created by MIDL compiler version 5.01.0164 */
+/* at Sun Jan 19 20:47:10 2003
+ */
+/* Compiler settings for stringinput.idl:
+ Os (OptLev=s), W1, Zp8, env=Win32, ms_ext, c_ext
+ error checks: allocation ref bounds_check enum stub_data , no_format_optimization
+*/
+//@@MIDL_FILE_HEADING( )
+
+#include <string.h>
+#include "stringinput.h"
+
+#define TYPE_FORMAT_STRING_SIZE 7
+#define PROC_FORMAT_STRING_SIZE 9
+
+typedef struct _MIDL_TYPE_FORMAT_STRING
+ {
+ short Pad;
+ unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
+ } MIDL_TYPE_FORMAT_STRING;
+
+typedef struct _MIDL_PROC_FORMAT_STRING
+ {
+ short Pad;
+ unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
+ } MIDL_PROC_FORMAT_STRING;
+
+extern const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString;
+extern const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString;
+
+/* Standard interface: stringinput, ver. 1.0,
+ GUID={0xcdf93a7e,0x2622,0x4ede,{0x99,0xb3,0xaa,0x4a,0x0d,0xac,0x86,0x15}} */
+
+
+extern RPC_DISPATCH_TABLE stringinput_v1_0_DispatchTable;
+
+static const RPC_SERVER_INTERFACE stringinput___RpcServerInterface =
+ {
+ sizeof(RPC_SERVER_INTERFACE),
+ {{0xcdf93a7e,0x2622,0x4ede,{0x99,0xb3,0xaa,0x4a,0x0d,0xac,0x86,0x15}},{1,0}},
+ {{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}},
+ &stringinput_v1_0_DispatchTable,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ };
+RPC_IF_HANDLE stringinput_v1_0_s_ifspec = (RPC_IF_HANDLE)& stringinput___RpcServerInterface;
+
+extern const MIDL_STUB_DESC stringinput_StubDesc;
+
+void __RPC_STUB
+stringinput_StringReceive(
+ PRPC_MESSAGE _pRpcMessage )
+{
+ MIDL_STUB_MESSAGE _StubMsg;
+ unsigned char __RPC_FAR *thestring;
+ RPC_STATUS _Status;
+
+ ((void)(_Status));
+ NdrServerInitializeNew(
+ _pRpcMessage,
+ &_StubMsg,
+ &stringinput_StubDesc);
+
+ ( unsigned char __RPC_FAR * )thestring = 0;
+ RpcTryFinally
+ {
+ RpcTryExcept
+ {
+ if ( (_pRpcMessage->DataRepresentation & 0X0000FFFFUL) != NDR_LOCAL_DATA_REPRESENTATION )
+ NdrConvert( (PMIDL_STUB_MESSAGE) &_StubMsg, (PFORMAT_STRING) &__MIDL_ProcFormatString.Format[0] );
+
+ NdrConformantStringUnmarshall( (PMIDL_STUB_MESSAGE) &_StubMsg,
+ (unsigned char __RPC_FAR * __RPC_FAR *)&thestring,
+ (PFORMAT_STRING) &__MIDL_TypeFormatString.Format[4],
+ (unsigned char)0 );
+
+ if(_StubMsg.Buffer > _StubMsg.BufferEnd)
+ {
+ RpcRaiseException(RPC_X_BAD_STUB_DATA);
+ }
+ }
+ RpcExcept( RPC_BAD_STUB_DATA_EXCEPTION_FILTER )
+ {
+ RpcRaiseException(RPC_X_BAD_STUB_DATA);
+ }
+ RpcEndExcept
+
+ StringReceive(thestring);
+
+ }
+ RpcFinally
+ {
+ }
+ RpcEndFinally
+ _pRpcMessage->BufferLength =
+ (unsigned int)((long)_StubMsg.Buffer - (long)_pRpcMessage->Buffer);
+
+}
+
+void __RPC_STUB
+stringinput_ShutdownServer(
+ PRPC_MESSAGE _pRpcMessage )
+{
+ MIDL_STUB_MESSAGE _StubMsg;
+ RPC_STATUS _Status;
+
+ ((void)(_Status));
+ NdrServerInitializeNew(
+ _pRpcMessage,
+ &_StubMsg,
+ &stringinput_StubDesc);
+
+ RpcTryFinally
+ {
+ RpcTryExcept
+ {
+ if(_StubMsg.Buffer > _StubMsg.BufferEnd)
+ {
+ RpcRaiseException(RPC_X_BAD_STUB_DATA);
+ }
+ }
+ RpcExcept( RPC_BAD_STUB_DATA_EXCEPTION_FILTER )
+ {
+ RpcRaiseException(RPC_X_BAD_STUB_DATA);
+ }
+ RpcEndExcept
+
+ ShutdownServer();
+
+ }
+ RpcFinally
+ {
+ }
+ RpcEndFinally
+ _pRpcMessage->BufferLength =
+ (unsigned int)((long)_StubMsg.Buffer - (long)_pRpcMessage->Buffer);
+
+}
+
+
+static const MIDL_STUB_DESC stringinput_StubDesc =
+ {
+ (void __RPC_FAR *)& stringinput___RpcServerInterface,
+ MIDL_user_allocate,
+ MIDL_user_free,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ __MIDL_TypeFormatString.Format,
+ 1, /* -error bounds_check flag */
+ 0x10001, /* Ndr library version */
+ 0,
+ 0x50100a4, /* MIDL Version 5.1.164 */
+ 0,
+ 0,
+ 0, /* notify & notify_flag routine table */
+ 1, /* Flags */
+ 0, /* Reserved3 */
+ 0, /* Reserved4 */
+ 0 /* Reserved5 */
+ };
+
+static RPC_DISPATCH_FUNCTION stringinput_table[] =
+ {
+ stringinput_StringReceive,
+ stringinput_ShutdownServer,
+ 0
+ };
+RPC_DISPATCH_TABLE stringinput_v1_0_DispatchTable =
+ {
+ 2,
+ stringinput_table
+ };
+
+#if !defined(__RPC_WIN32__)
+#error Invalid build platform for this stub.
+#endif
+
+static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString =
+ {
+ 0,
+ {
+
+ 0x4d, /* FC_IN_PARAM */
+#ifndef _ALPHA_
+ 0x1, /* x86, MIPS & PPC Stack size = 1 */
+#else
+ 0x2, /* Alpha Stack size = 2 */
+#endif
+/* 2 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
+/* 4 */ 0x5b, /* FC_END */
+ 0x5c, /* FC_PAD */
+/* 6 */ 0x5b, /* FC_END */
+ 0x5c, /* FC_PAD */
+
+ 0x0
+ }
+ };
+
+static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString =
+ {
+ 0,
+ {
+ NdrFcShort( 0x0 ), /* 0 */
+/* 2 */
+ 0x11, 0x8, /* FC_RP [simple_pointer] */
+/* 4 */
+ 0x22, /* FC_C_CSTRING */
+ 0x5c, /* FC_PAD */
+
+ 0x0
+ }
+ };
+#endif /* __RPC_WIN32__ */
--- /dev/null 2002-11-28 07:03:29.000000000 -0600
+++ ./dlls/rpcrt4/tests/stringinput_x86_c.c 2003-01-19 21:54:42.000000000 -0600
@@ -0,0 +1,217 @@
+#include "rpc.h"
+#if defined( __RPC_WIN32__ )
+#include "widl_scraps.h"
+/* this ALWAYS GENERATED file contains the RPC client stubs */
+
+
+/* File created by MIDL compiler version 5.01.0164 */
+/* at Sun Jan 19 20:47:10 2003
+ */
+/* Compiler settings for stringinput.idl:
+ Os (OptLev=s), W1, Zp8, env=Win32, ms_ext, c_ext
+ error checks: allocation ref bounds_check enum stub_data , no_format_optimization
+*/
+//@@MIDL_FILE_HEADING( )
+
+#include <string.h>
+#if defined( _ALPHA_ )
+#include <stdarg.h>
+#endif
+
+#include "stringinput.h"
+
+#define TYPE_FORMAT_STRING_SIZE 7
+#define PROC_FORMAT_STRING_SIZE 9
+
+typedef struct _MIDL_TYPE_FORMAT_STRING
+ {
+ short Pad;
+ unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
+ } MIDL_TYPE_FORMAT_STRING;
+
+typedef struct _MIDL_PROC_FORMAT_STRING
+ {
+ short Pad;
+ unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
+ } MIDL_PROC_FORMAT_STRING;
+
+
+extern const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString;
+extern const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString;
+
+/* Standard interface: stringinput, ver. 1.0,
+ GUID={0xcdf93a7e,0x2622,0x4ede,{0x99,0xb3,0xaa,0x4a,0x0d,0xac,0x86,0x15}} */
+
+handle_t stringinput_binding_handle;
+
+
+static const RPC_CLIENT_INTERFACE stringinput___RpcClientInterface =
+ {
+ sizeof(RPC_CLIENT_INTERFACE),
+ {{0xcdf93a7e,0x2622,0x4ede,{0x99,0xb3,0xaa,0x4a,0x0d,0xac,0x86,0x15}},{1,0}},
+ {{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}},
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ };
+RPC_IF_HANDLE stringinput_v1_0_c_ifspec = (RPC_IF_HANDLE)& stringinput___RpcClientInterface;
+
+extern const MIDL_STUB_DESC stringinput_StubDesc;
+
+static RPC_BINDING_HANDLE stringinput__MIDL_AutoBindHandle;
+
+
+void StringReceive(
+ /* [ref][string][in] */ unsigned char __RPC_FAR *thestring)
+{
+
+ RPC_BINDING_HANDLE _Handle = 0;
+
+ RPC_MESSAGE _RpcMessage;
+
+ MIDL_STUB_MESSAGE _StubMsg;
+
+ if(!thestring)
+ {
+ RpcRaiseException(RPC_X_NULL_REF_POINTER);
+ }
+ RpcTryFinally
+ {
+ NdrClientInitializeNew(
+ ( PRPC_MESSAGE )&_RpcMessage,
+ ( PMIDL_STUB_MESSAGE )&_StubMsg,
+ ( PMIDL_STUB_DESC )&stringinput_StubDesc,
+ 0);
+
+
+ _Handle = stringinput_binding_handle;
+
+
+ _StubMsg.BufferLength = 12U;
+ NdrConformantStringBufferSize( (PMIDL_STUB_MESSAGE) &_StubMsg,
+ (unsigned char __RPC_FAR *)thestring,
+ (PFORMAT_STRING) &__MIDL_TypeFormatString.Format[4] );
+
+ NdrGetBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg, _StubMsg.BufferLength, _Handle );
+
+ NdrConformantStringMarshall( (PMIDL_STUB_MESSAGE)& _StubMsg,
+ (unsigned char __RPC_FAR *)thestring,
+ (PFORMAT_STRING) &__MIDL_TypeFormatString.Format[4] );
+
+ NdrSendReceive( (PMIDL_STUB_MESSAGE) &_StubMsg, (unsigned char __RPC_FAR *) _StubMsg.Buffer );
+
+ }
+ RpcFinally
+ {
+ NdrFreeBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg );
+
+ }
+ RpcEndFinally
+
+}
+
+
+void ShutdownServer( void)
+{
+
+ RPC_BINDING_HANDLE _Handle = 0;
+
+ RPC_MESSAGE _RpcMessage;
+
+ MIDL_STUB_MESSAGE _StubMsg;
+
+ RpcTryFinally
+ {
+ NdrClientInitializeNew(
+ ( PRPC_MESSAGE )&_RpcMessage,
+ ( PMIDL_STUB_MESSAGE )&_StubMsg,
+ ( PMIDL_STUB_DESC )&stringinput_StubDesc,
+ 1);
+
+
+ _Handle = stringinput_binding_handle;
+
+
+ _StubMsg.BufferLength = 0U;
+ NdrGetBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg, _StubMsg.BufferLength, _Handle );
+
+ NdrSendReceive( (PMIDL_STUB_MESSAGE) &_StubMsg, (unsigned char __RPC_FAR *) _StubMsg.Buffer );
+
+ }
+ RpcFinally
+ {
+ NdrFreeBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg );
+
+ }
+ RpcEndFinally
+
+}
+
+
+static const MIDL_STUB_DESC stringinput_StubDesc =
+ {
+ (void __RPC_FAR *)& stringinput___RpcClientInterface,
+ MIDL_user_allocate,
+ MIDL_user_free,
+ &stringinput_binding_handle,
+ 0,
+ 0,
+ 0,
+ 0,
+ __MIDL_TypeFormatString.Format,
+ 1, /* -error bounds_check flag */
+ 0x10001, /* Ndr library version */
+ 0,
+ 0x50100a4, /* MIDL Version 5.1.164 */
+ 0,
+ 0,
+ 0, /* notify & notify_flag routine table */
+ 1, /* Flags */
+ 0, /* Reserved3 */
+ 0, /* Reserved4 */
+ 0 /* Reserved5 */
+ };
+
+#if !defined(__RPC_WIN32__)
+#error Invalid build platform for this stub.
+#endif
+
+static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString =
+ {
+ 0,
+ {
+
+ 0x4d, /* FC_IN_PARAM */
+#ifndef _ALPHA_
+ 0x1, /* x86, MIPS & PPC Stack size = 1 */
+#else
+ 0x2, /* Alpha Stack size = 2 */
+#endif
+/* 2 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
+/* 4 */ 0x5b, /* FC_END */
+ 0x5c, /* FC_PAD */
+/* 6 */ 0x5b, /* FC_END */
+ 0x5c, /* FC_PAD */
+
+ 0x0
+ }
+ };
+
+static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString =
+ {
+ 0,
+ {
+ NdrFcShort( 0x0 ), /* 0 */
+/* 2 */
+ 0x11, 0x8, /* FC_RP [simple_pointer] */
+/* 4 */
+ 0x22, /* FC_C_CSTRING */
+ 0x5c, /* FC_PAD */
+
+ 0x0
+ }
+ };
+#endif /* __RPC_WIN32__ */
--- /dev/null 2002-11-28 07:03:29.000000000 -0600
+++ ./dlls/rpcrt4/tests/widl_scraps.h 2003-01-19 21:54:42.000000000 -0600
@@ -0,0 +1,11 @@
+#ifndef __WINE_WIDL_SCRAPS
+#define __WINE_WIDL_SCRAPS
+
+#include "rpcdce.h"
+
+extern handle_t stringinput_binding_handle;
+
+void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t);
+void __RPC_USER MIDL_user_free( void __RPC_FAR * );
+
+#endif /* __WINE_WIDL_SCRAPS */
--
gmt
"Everything that is really great and inspiring is created by
the individual who can labor in freedom." --Albert Einstein
-------------- next part --------------
A non-text attachment was scrubbed...
Name: seh_try_macros-0to7.bz2
Type: application/x-bzip2
Size: 4435 bytes
Desc: not available
Url : http://www.winehq.org/pipermail/wine-patches/attachments/20030120/3fddd8be/seh_try_macros-0to7.bin
More information about the wine-patches
mailing list