widl: Create an explicit structure for the function frame of all generated functions.

Store _StubMsg in the frame structure since it's needed for exception handling.
This commit is contained in:
Alexandre Julliard 2008-09-15 14:02:26 +02:00
parent af78a7bfe4
commit 1218aff94d
4 changed files with 106 additions and 96 deletions

View File

@ -115,6 +115,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
/* write the functions body */
fprintf(client, "{\n");
indent++;
print_client( "struct __client_frame __f, * const __frame = &__f;\n" );
/* declare return value '_RetVal' */
if (!is_void(get_func_return_type(func)))
@ -128,7 +129,6 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
print_client("RPC_BINDING_HANDLE _Handle = 0;\n");
print_client("RPC_MESSAGE _RpcMessage;\n");
print_client("MIDL_STUB_MESSAGE _StubMsg;\n");
if (!is_void(get_func_return_type(func)) && decl_indirect(get_func_return_type(func)))
{
print_client("void *_p_%s = &%s;\n",
@ -149,7 +149,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
print_client("NdrClientInitializeNew(\n");
indent++;
print_client("(PRPC_MESSAGE)&_RpcMessage,\n");
print_client("(PMIDL_STUB_MESSAGE)&_StubMsg,\n");
print_client("(PMIDL_STUB_MESSAGE)&__frame->_StubMsg,\n");
print_client("(PMIDL_STUB_DESC)&%s_StubDesc,\n", iface->name);
print_client("%d);\n", method_count);
indent--;
@ -207,8 +207,8 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
print_client("NdrGetBuffer(\n");
indent++;
print_client("(PMIDL_STUB_MESSAGE)&_StubMsg,\n");
print_client("_StubMsg.BufferLength,\n");
print_client("(PMIDL_STUB_MESSAGE)&__frame->_StubMsg,\n");
print_client("__frame->_StubMsg.BufferLength,\n");
if (implicit_handle || explicit_handle_var || explicit_generic_handle_var || context_handle_var)
print_client("_Handle);\n");
else
@ -221,16 +221,16 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
/* send/receive message */
/* print_client("NdrNsSendReceive(\n"); */
/* print_client("(unsigned char *)_StubMsg.Buffer,\n"); */
/* print_client("(unsigned char *)__frame->_StubMsg.Buffer,\n"); */
/* print_client("(RPC_BINDING_HANDLE *) &%s__MIDL_AutoBindHandle);\n", iface->name); */
print_client("NdrSendReceive(\n");
indent++;
print_client("(PMIDL_STUB_MESSAGE)&_StubMsg,\n");
print_client("(unsigned char *)_StubMsg.Buffer);\n\n");
print_client("(PMIDL_STUB_MESSAGE)&__frame->_StubMsg,\n");
print_client("(unsigned char *)__frame->_StubMsg.Buffer);\n\n");
indent--;
print_client("_StubMsg.BufferStart = (unsigned char *)_RpcMessage.Buffer;\n");
print_client("_StubMsg.BufferEnd = _StubMsg.BufferStart + _RpcMessage.BufferLength;\n");
print_client("__frame->_StubMsg.BufferStart = (unsigned char *)_RpcMessage.Buffer;\n");
print_client("__frame->_StubMsg.BufferEnd = __frame->_StubMsg.BufferStart + _RpcMessage.BufferLength;\n");
if (has_out_arg_or_return(func))
{
@ -240,7 +240,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
indent++;
print_client("NdrConvert(\n");
indent++;
print_client("(PMIDL_STUB_MESSAGE)&_StubMsg,\n");
print_client("(PMIDL_STUB_MESSAGE)&__frame->_StubMsg,\n");
print_client("(PFORMAT_STRING)&__MIDL_ProcFormatString.Format[%u]);\n", *proc_offset);
indent -= 2;
}
@ -282,7 +282,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
if (has_full_pointer)
write_full_pointer_free(client, indent, func);
print_client("NdrFreeBuffer((PMIDL_STUB_MESSAGE)&_StubMsg);\n");
print_client("NdrFreeBuffer((PMIDL_STUB_MESSAGE)&__frame->_StubMsg);\n");
if (!implicit_handle && explicit_generic_handle_var)
{
@ -434,7 +434,12 @@ static void init_client(void)
print_client("#endif\n");
fprintf(client, "\n");
print_client("#include \"%s\"\n", header_name);
fprintf(client, "\n");
print_client( "\n");
print_client( "struct __client_frame\n");
print_client( "{\n");
print_client( " MIDL_STUB_MESSAGE _StubMsg;\n");
print_client( "};\n");
print_client( "\n");
}

View File

@ -125,15 +125,15 @@ static void init_proxy(const statement_list_t *stmts)
print_proxy( " EXCEPTION_REGISTRATION_RECORD frame;\n");
print_proxy( " sigjmp_buf jmp;\n");
print_proxy( " DWORD code;\n");
print_proxy( " MIDL_STUB_MESSAGE *stub;\n");
print_proxy( " MIDL_STUB_MESSAGE _StubMsg;\n");
print_proxy( " void *this;\n");
print_proxy( " int fullptr;\n");
print_proxy( "};\n");
print_proxy( "\n");
print_proxy("static void __proxy_finally_handler( struct __proxy_frame *frame )\n");
print_proxy( "{\n");
print_proxy( " if (frame->fullptr) NdrFullPointerXlatFree( frame->stub->FullPtrXlatTables );\n");
print_proxy( " if (frame->this) NdrProxyFreeBuffer( frame->this, frame->stub );\n" );
print_proxy( " if (frame->fullptr) NdrFullPointerXlatFree( frame->_StubMsg.FullPtrXlatTables );\n");
print_proxy( " if (frame->this) NdrProxyFreeBuffer( frame->this, &frame->_StubMsg );\n" );
print_proxy( "}\n\n");
print_proxy( "static DWORD __proxy_exception_handler( EXCEPTION_RECORD *record,\n");
print_proxy( " EXCEPTION_REGISTRATION_RECORD *frame,\n");
@ -148,7 +148,7 @@ static void init_proxy(const statement_list_t *stmts)
print_proxy( " __proxy_finally_handler( proxy_frame );\n");
print_proxy( " return ExceptionContinueSearch;\n");
print_proxy( " }\n" );
print_proxy( " if (proxy_frame->stub->dwStubPhase == PROXY_SENDRECEIVE)\n");
print_proxy( " if (proxy_frame->_StubMsg.dwStubPhase == PROXY_SENDRECEIVE)\n");
print_proxy( " return ExceptionContinueSearch;\n");
print_proxy( "\n");
print_proxy( " proxy_frame->code = record->ExceptionCode;\n");
@ -159,35 +159,29 @@ static void init_proxy(const statement_list_t *stmts)
print_proxy( "}\n");
print_proxy( "\n");
print_proxy( "#define RpcTryExcept \\\n");
print_proxy( " do { \\\n");
print_proxy( " struct __proxy_frame __proxy_frame; \\\n");
print_proxy( " __proxy_frame.frame.Handler = __proxy_exception_handler; \\\n");
print_proxy( " __proxy_frame.stub = &_StubMsg; \\\n");
print_proxy( " if (!sigsetjmp( __proxy_frame.jmp, 0 )) \\\n");
print_proxy( " __frame->frame.Handler = __proxy_exception_handler; \\\n");
print_proxy( " if (!sigsetjmp( __frame->jmp, 0 )) \\\n");
print_proxy( " { \\\n");
print_proxy( " __wine_push_frame( &__proxy_frame.frame ); \\\n");
print_proxy( " __wine_push_frame( &__frame->frame ); \\\n");
print_proxy( " {\n");
print_proxy( "\n");
print_proxy( "#define RpcExcept(expr) \\\n");
print_proxy( " } \\\n");
print_proxy( " __wine_pop_frame( &__proxy_frame.frame ); \\\n");
print_proxy( " __wine_pop_frame( &__frame->frame ); \\\n");
print_proxy( " } \\\n");
print_proxy( " else \\\n");
print_proxy( " {\n");
print_proxy( " else\n");
print_proxy( "\n");
print_proxy( "#define RpcEndExcept \\\n");
print_proxy( " } \\\n");
print_proxy( " } while(0);\n");
print_proxy( "#define RpcEndExcept\n");
print_proxy( "\n");
print_proxy( "#define RpcExceptionCode() (__proxy_frame.code)\n");
print_proxy( "#define RpcExceptionCode() (__frame->code)\n");
print_proxy( "\n");
print_proxy( "#define RpcTryFinallyProxy(ptr) \\\n");
print_proxy(" __proxy_frame.this = This; \\\n");
print_proxy(" __proxy_frame.fullptr = ptr;\n");
print_proxy(" __frame->this = This; \\\n");
print_proxy(" __frame->fullptr = ptr;\n");
print_proxy( "\n");
print_proxy( "#define RpcFinallyProxy \\\n");
print_proxy(" __proxy_frame.this = 0; \\\n");
print_proxy(" __proxy_frame.fullptr = 0;\n");
print_proxy(" __frame->this = 0; \\\n");
print_proxy(" __frame->fullptr = 0;\n");
print_proxy( "\n");
print_proxy( "#define RpcTryFinallyStub\n");
print_proxy( "\n");
@ -202,8 +196,18 @@ static void init_proxy(const statement_list_t *stmts)
print_proxy( "#define RpcFinallyProxy RpcFinally\n");
print_proxy( "#define RpcFinallyStub RpcFinally\n");
print_proxy( "\n");
print_proxy( "struct __proxy_frame\n");
print_proxy( "{\n");
print_proxy( " MIDL_STUB_MESSAGE _StubMsg;\n");
print_proxy( "};\n");
print_proxy( "\n");
print_proxy( "#endif /* USE_COMPILER_EXCEPTIONS */\n");
print_proxy( "\n");
print_proxy( "struct __stub_frame\n");
print_proxy( "{\n");
print_proxy( " MIDL_STUB_MESSAGE _StubMsg;\n");
print_proxy( "};\n");
print_proxy( "\n");
write_formatstringsdecl(proxy, indent, stmts, need_proxy);
write_stubdescproto();
}
@ -293,10 +297,10 @@ static void free_variable( const var_t *arg )
if (size)
{
print_proxy( "_StubMsg.MaxCount = " );
print_proxy( "__frame->_StubMsg.MaxCount = " );
write_expr(proxy, size, 0, 1, NULL, NULL);
fprintf(proxy, ";\n\n");
print_proxy( "NdrClearOutParameters( &_StubMsg, ");
print_proxy( "NdrClearOutParameters( &__frame->_StubMsg, ");
fprintf(proxy, "&__MIDL_TypeFormatString.Format[%u], ", type_offset );
fprintf(proxy, "(void*)%s );\n", arg->name );
return;
@ -321,11 +325,11 @@ static void free_variable( const var_t *arg )
iid = get_attrp( arg->attrs, ATTR_IIDIS );
if( iid )
{
print_proxy( "_StubMsg.MaxCount = (unsigned long) " );
print_proxy( "__frame->_StubMsg.MaxCount = (unsigned long) " );
write_expr(proxy, iid, 1, 1, NULL, NULL);
print_proxy( ";\n\n" );
}
print_proxy( "NdrClearOutParameters( &_StubMsg, ");
print_proxy( "NdrClearOutParameters( &__frame->_StubMsg, ");
fprintf(proxy, "&__MIDL_TypeFormatString.Format[%u], ", type_offset );
fprintf(proxy, "(void*)%s );\n", arg->name );
break;
@ -364,6 +368,7 @@ static void gen_proxy(type_t *iface, const func_t *cur, int idx,
print_proxy( ")\n");
print_proxy( "{\n");
indent ++;
print_proxy( "struct __proxy_frame __f, * const __frame = &__f;\n" );
/* local variables */
if (has_ret) {
print_proxy( "" );
@ -371,7 +376,6 @@ static void gen_proxy(type_t *iface, const func_t *cur, int idx,
print_proxy( " _RetVal;\n");
}
print_proxy( "RPC_MESSAGE _RpcMessage;\n" );
print_proxy( "MIDL_STUB_MESSAGE _StubMsg;\n" );
if (has_ret) {
if (decl_indirect(get_func_return_type(cur)))
print_proxy("void *_p_%s = &%s;\n",
@ -388,7 +392,7 @@ static void gen_proxy(type_t *iface, const func_t *cur, int idx,
print_proxy( "RpcTryExcept\n" );
print_proxy( "{\n" );
indent++;
print_proxy( "NdrProxyInitialize(This, &_RpcMessage, &_StubMsg, &Object_StubDesc, %d);\n", idx);
print_proxy( "NdrProxyInitialize(This, &_RpcMessage, &__frame->_StubMsg, &Object_StubDesc, %d);\n", idx);
proxy_check_pointers( cur->args );
print_proxy( "RpcTryFinallyProxy(%d)\n", has_full_pointer );
@ -397,18 +401,18 @@ static void gen_proxy(type_t *iface, const func_t *cur, int idx,
write_remoting_arguments(proxy, indent, cur, PASS_IN, PHASE_BUFFERSIZE);
print_proxy( "NdrProxyGetBuffer(This, &_StubMsg);\n" );
print_proxy( "NdrProxyGetBuffer(This, &__frame->_StubMsg);\n" );
write_remoting_arguments(proxy, indent, cur, PASS_IN, PHASE_MARSHAL);
print_proxy( "NdrProxySendReceive(This, &_StubMsg);\n" );
print_proxy( "NdrProxySendReceive(This, &__frame->_StubMsg);\n" );
fprintf(proxy, "\n");
print_proxy( "_StubMsg.BufferStart = _RpcMessage.Buffer;\n" );
print_proxy( "_StubMsg.BufferEnd = _StubMsg.BufferStart + _RpcMessage.BufferLength;\n\n" );
print_proxy( "__frame->_StubMsg.BufferStart = _RpcMessage.Buffer;\n" );
print_proxy( "__frame->_StubMsg.BufferEnd = __frame->_StubMsg.BufferStart + _RpcMessage.BufferLength;\n\n" );
print_proxy("if ((_RpcMessage.DataRepresentation & 0xffff) != NDR_LOCAL_DATA_REPRESENTATION)\n");
indent++;
print_proxy("NdrConvert( &_StubMsg, &__MIDL_ProcFormatString.Format[%u]);\n", proc_offset );
print_proxy("NdrConvert( &__frame->_StubMsg, &__MIDL_ProcFormatString.Format[%u]);\n", proc_offset );
indent--;
fprintf(proxy, "\n");
@ -430,13 +434,13 @@ static void gen_proxy(type_t *iface, const func_t *cur, int idx,
indent++;
if (has_full_pointer)
write_full_pointer_free(proxy, indent, cur);
print_proxy( "NdrProxyFreeBuffer(This, &_StubMsg);\n" );
print_proxy( "NdrProxyFreeBuffer(This, &__frame->_StubMsg);\n" );
indent--;
print_proxy( "}\n");
print_proxy( "RpcEndFinally\n" );
indent--;
print_proxy( "}\n" );
print_proxy( "RpcExcept(_StubMsg.dwStubPhase != PROXY_SENDRECEIVE)\n" );
print_proxy( "RpcExcept(__frame->_StubMsg.dwStubPhase != PROXY_SENDRECEIVE)\n" );
print_proxy( "{\n" );
if (has_ret) {
indent++;
@ -473,14 +477,14 @@ static void gen_stub(type_t *iface, const func_t *cur, const char *cas,
indent--;
print_proxy( "{\n");
indent++;
print_proxy( "struct __stub_frame __f, * const __frame = &__f;\n" );
print_proxy("%s * _This = (%s*)((CStdStubBuffer*)This)->pvServerObject;\n", iface->name, iface->name);
print_proxy("MIDL_STUB_MESSAGE _StubMsg;\n");
declare_stub_args( proxy, indent, cur );
fprintf(proxy, "\n");
/* FIXME: trace */
print_proxy("NdrStubInitialize(_pRpcMessage, &_StubMsg, &Object_StubDesc, _pRpcChannelBuffer);\n");
print_proxy("NdrStubInitialize(_pRpcMessage, &__frame->_StubMsg, &Object_StubDesc, _pRpcChannelBuffer);\n");
fprintf(proxy, "\n");
write_parameters_init(proxy, indent, cur);
@ -492,7 +496,7 @@ static void gen_stub(type_t *iface, const func_t *cur, const char *cas,
write_full_pointer_init(proxy, indent, cur, TRUE);
print_proxy("if ((_pRpcMessage->DataRepresentation & 0xffff) != NDR_LOCAL_DATA_REPRESENTATION)\n");
indent++;
print_proxy("NdrConvert( &_StubMsg, &__MIDL_ProcFormatString.Format[%u]);\n", proc_offset );
print_proxy("NdrConvert( &__frame->_StubMsg, &__MIDL_ProcFormatString.Format[%u]);\n", proc_offset );
indent--;
fprintf(proxy, "\n");
@ -524,7 +528,7 @@ static void gen_stub(type_t *iface, const func_t *cur, const char *cas,
if (!is_void(get_func_return_type(cur)))
write_remoting_arguments(proxy, indent, cur, PASS_RETURN, PHASE_BUFFERSIZE);
print_proxy("NdrStubGetBuffer(This, _pRpcChannelBuffer, &_StubMsg);\n");
print_proxy("NdrStubGetBuffer(This, _pRpcChannelBuffer, &__frame->_StubMsg);\n");
write_remoting_arguments(proxy, indent, cur, PASS_OUT, PHASE_MARSHAL);
fprintf(proxy, "\n");
@ -546,7 +550,7 @@ static void gen_stub(type_t *iface, const func_t *cur, const char *cas,
print_proxy("}\n");
print_proxy("RpcEndFinally\n");
print_proxy("_pRpcMessage->BufferLength = _StubMsg.Buffer - (unsigned char *)_pRpcMessage->Buffer;\n");
print_proxy("_pRpcMessage->BufferLength = __frame->_StubMsg.Buffer - (unsigned char *)_pRpcMessage->Buffer;\n");
indent--;
print_proxy("}\n");

View File

@ -68,11 +68,11 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
/* write the functions body */
fprintf(server, "{\n");
indent++;
print_server( "struct __server_frame __f, * const __frame = &__f;\n" );
/* Declare arguments */
declare_stub_args(server, indent, func);
print_server("MIDL_STUB_MESSAGE _StubMsg;\n");
print_server("RPC_STATUS _Status;\n");
fprintf(server, "\n");
@ -81,7 +81,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
print_server("NdrServerInitializeNew(\n");
indent++;
print_server("_pRpcMessage,\n");
print_server("&_StubMsg,\n");
print_server("&__frame->_StubMsg,\n");
print_server("&%s_StubDesc);\n", iface->name);
indent--;
fprintf(server, "\n");
@ -110,7 +110,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
indent++;
print_server("NdrConvert(\n");
indent++;
print_server("(PMIDL_STUB_MESSAGE)&_StubMsg,\n");
print_server("(PMIDL_STUB_MESSAGE)&__frame->_StubMsg,\n");
print_server("(PFORMAT_STRING)&__MIDL_ProcFormatString.Format[%u]);\n", *proc_offset);
indent -= 2;
fprintf(server, "\n");
@ -119,7 +119,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
write_remoting_arguments(server, indent, func, PASS_IN, PHASE_UNMARSHAL);
}
print_server("if (_StubMsg.Buffer > _StubMsg.BufferEnd)\n");
print_server("if (__frame->_StubMsg.Buffer > __frame->_StubMsg.BufferEnd)\n");
print_server("{\n");
indent++;
print_server("RpcRaiseException(RPC_X_BAD_STUB_DATA);\n");
@ -188,7 +188,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
if (!is_void(get_func_return_type(func)))
write_remoting_arguments(server, indent, func, PASS_RETURN, PHASE_BUFFERSIZE);
print_server("_pRpcMessage->BufferLength = _StubMsg.BufferLength;\n");
print_server("_pRpcMessage->BufferLength = __frame->_StubMsg.BufferLength;\n");
fprintf(server, "\n");
print_server("_Status = I_RpcGetBuffer(_pRpcMessage);\n");
print_server("if (_Status)\n");
@ -196,7 +196,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
print_server("RpcRaiseException(_Status);\n");
indent--;
fprintf(server, "\n");
print_server("_StubMsg.Buffer = (unsigned char *)_pRpcMessage->Buffer;\n");
print_server("__frame->_StubMsg.Buffer = (unsigned char *)_pRpcMessage->Buffer;\n");
fprintf(server, "\n");
}
@ -226,7 +226,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
fprintf(server, "\n");
print_server("_pRpcMessage->BufferLength =\n");
indent++;
print_server("(unsigned int)(_StubMsg.Buffer - (unsigned char *)_pRpcMessage->Buffer);\n");
print_server("(unsigned int)(__frame->_StubMsg.Buffer - (unsigned char *)_pRpcMessage->Buffer);\n");
indent--;
indent--;
fprintf(server, "}\n");
@ -382,6 +382,7 @@ static void init_server(void)
print_server( "{\n");
print_server( " EXCEPTION_REGISTRATION_RECORD frame;\n");
print_server( " sigjmp_buf jmp;\n");
print_server( " MIDL_STUB_MESSAGE _StubMsg;\n");
print_server( "};\n");
print_server( "\n");
print_server("static DWORD __server_exception_handler( EXCEPTION_RECORD *record,\n");
@ -405,25 +406,25 @@ static void init_server(void)
print_server(" siglongjmp( server_frame->jmp, 1 );\n");
print_server("}\n");
print_server("#define RpcTryExcept \\\n");
print_server(" do { \\\n");
print_server(" struct __server_frame __server_frame; \\\n");
print_server(" __server_frame.frame.Handler = __server_exception_handler; \\\n");
print_server(" if (!sigsetjmp( __server_frame.jmp, 0 )) \\\n");
print_server(" __frame->frame.Handler = __server_exception_handler; \\\n");
print_server(" if (!sigsetjmp( __frame->jmp, 0 )) \\\n");
print_server(" { \\\n");
print_server(" __wine_push_frame( &__server_frame.frame ); \\\n");
print_server(" {\n");
print_server(" __wine_push_frame( &__frame->frame );\n");
print_server("\n");
print_server("#define RpcExcept(expr) \\\n");
print_server(" } \\\n");
print_server(" __wine_pop_frame( &__server_frame.frame ); \\\n");
print_server(" __wine_pop_frame( &__frame->frame ); \\\n");
print_server(" } \\\n");
print_server(" else \\\n");
print_server(" {\n");
print_server(" else\n");
print_server("\n");
print_server("#define RpcEndExcept \\\n");
print_server(" } \\\n");
print_server(" } while(0);\n");
print_server("#define RpcEndExcept\n");
print_server("\n");
print_server( "#else /* USE_COMPILER_EXCEPTIONS */\n");
print_server( "\n");
print_server( "struct __server_frame\n");
print_server( "{\n");
print_server( " MIDL_STUB_MESSAGE _StubMsg;\n");
print_server( "};\n");
print_server( "\n");
print_server("#endif /* USE_COMPILER_EXCEPTIONS */\n");
print_server("\n");
}

View File

@ -897,14 +897,14 @@ int is_full_pointer_function(const func_t *func)
void write_full_pointer_init(FILE *file, int indent, const func_t *func, int is_server)
{
print_file(file, indent, "_StubMsg.FullPtrXlatTables = NdrFullPointerXlatInit(0,%s);\n",
print_file(file, indent, "__frame->_StubMsg.FullPtrXlatTables = NdrFullPointerXlatInit(0,%s);\n",
is_server ? "XLAT_SERVER" : "XLAT_CLIENT");
fprintf(file, "\n");
}
void write_full_pointer_free(FILE *file, int indent, const func_t *func)
{
print_file(file, indent, "NdrFullPointerXlatFree(_StubMsg.FullPtrXlatTables);\n");
print_file(file, indent, "NdrFullPointerXlatFree(__frame->_StubMsg.FullPtrXlatTables);\n");
fprintf(file, "\n");
}
@ -2656,7 +2656,7 @@ static void print_phase_function(FILE *file, int indent, const char *type,
print_file(file, indent, "Ndr%s%s(\n", type, function);
indent++;
print_file(file, indent, "&_StubMsg,\n");
print_file(file, indent, "&__frame->_StubMsg,\n");
print_file(file, indent, "%s%s%s%s,\n",
(phase == PHASE_UNMARSHAL) ? "(unsigned char **)" : "(unsigned char *)",
(phase == PHASE_UNMARSHAL || decl_indirect(var->type)) ? "&" : "",
@ -2728,8 +2728,8 @@ void print_phase_basetype(FILE *file, int indent, enum remoting_phase phase,
}
if (phase == PHASE_MARSHAL)
print_file(file, indent, "MIDL_memset(_StubMsg.Buffer, 0, (0x%x - (long)_StubMsg.Buffer) & 0x%x);\n", alignment, alignment - 1);
print_file(file, indent, "_StubMsg.Buffer = (unsigned char *)(((long)_StubMsg.Buffer + %u) & ~0x%x);\n",
print_file(file, indent, "MIDL_memset(__frame->_StubMsg.Buffer, 0, (0x%x - (long)__frame->_StubMsg.Buffer) & 0x%x);\n", alignment, alignment - 1);
print_file(file, indent, "__frame->_StubMsg.Buffer = (unsigned char *)(((long)__frame->_StubMsg.Buffer + %u) & ~0x%x);\n",
alignment - 1, alignment - 1);
if (phase == PHASE_MARSHAL)
@ -2737,17 +2737,17 @@ void print_phase_basetype(FILE *file, int indent, enum remoting_phase phase,
print_file(file, indent, "*(");
write_type_decl(file, is_ptr(type) ? type->ref : type, NULL);
if (is_ptr(type))
fprintf(file, " *)_StubMsg.Buffer = *");
fprintf(file, " *)__frame->_StubMsg.Buffer = *");
else
fprintf(file, " *)_StubMsg.Buffer = ");
fprintf(file, " *)__frame->_StubMsg.Buffer = ");
fprintf(file, "%s", varname);
fprintf(file, ";\n");
}
else if (phase == PHASE_UNMARSHAL)
{
print_file(file, indent, "if (_StubMsg.Buffer + sizeof(");
print_file(file, indent, "if (__frame->_StubMsg.Buffer + sizeof(");
write_type_decl(file, is_ptr(type) ? type->ref : type, NULL);
fprintf(file, ") > _StubMsg.BufferEnd)\n");
fprintf(file, ") > __frame->_StubMsg.BufferEnd)\n");
print_file(file, indent, "{\n");
print_file(file, indent + 1, "RpcRaiseException(RPC_X_BAD_STUB_DATA);\n");
print_file(file, indent, "}\n");
@ -2761,10 +2761,10 @@ void print_phase_basetype(FILE *file, int indent, enum remoting_phase phase,
else
fprintf(file, " = *(");
write_type_decl(file, is_ptr(type) ? type->ref : type, NULL);
fprintf(file, " *)_StubMsg.Buffer;\n");
fprintf(file, " *)__frame->_StubMsg.Buffer;\n");
}
print_file(file, indent, "_StubMsg.Buffer += sizeof(");
print_file(file, indent, "__frame->_StubMsg.Buffer += sizeof(");
write_type_decl(file, var->type, NULL);
fprintf(file, ");\n");
}
@ -2812,14 +2812,14 @@ static void write_parameter_conf_or_var_exprs(FILE *file, int indent,
{
if (type->size_is)
{
print_file(file, indent, "_StubMsg.MaxCount = (unsigned long)");
print_file(file, indent, "__frame->_StubMsg.MaxCount = (unsigned long)");
write_expr(file, type->size_is, 1, 1, NULL, NULL);
fprintf(file, ";\n\n");
}
if (type->length_is)
{
print_file(file, indent, "_StubMsg.Offset = (unsigned long)0;\n"); /* FIXME */
print_file(file, indent, "_StubMsg.ActualCount = (unsigned long)");
print_file(file, indent, "__frame->_StubMsg.Offset = (unsigned long)0;\n"); /* FIXME */
print_file(file, indent, "__frame->_StubMsg.ActualCount = (unsigned long)");
write_expr(file, type->length_is, 1, 1, NULL, NULL);
fprintf(file, ";\n\n");
}
@ -2830,7 +2830,7 @@ static void write_parameter_conf_or_var_exprs(FILE *file, int indent,
{
if (is_conformance_needed_for_phase(phase))
{
print_file(file, indent, "_StubMsg.MaxCount = (unsigned long)");
print_file(file, indent, "__frame->_StubMsg.MaxCount = (unsigned long)");
write_expr(file, get_attrp(var->attrs, ATTR_SWITCHIS), 1, 1, NULL, NULL);
fprintf(file, ";\n\n");
}
@ -2842,7 +2842,7 @@ static void write_parameter_conf_or_var_exprs(FILE *file, int indent,
if (is_conformance_needed_for_phase(phase) && (iid = get_attrp( var->attrs, ATTR_IIDIS )))
{
print_file( file, indent, "_StubMsg.MaxCount = (unsigned long) " );
print_file( file, indent, "__frame->_StubMsg.MaxCount = (unsigned long) " );
write_expr( file, iid, 1, 1, NULL, NULL );
fprintf( file, ";\n\n" );
}
@ -2900,14 +2900,14 @@ static void write_remoting_arg(FILE *file, int indent, const func_t *func,
* be direct, otherwise it is a pointer */
int is_ch_ptr = is_aliaschain_attr(type, ATTR_CONTEXTHANDLE) ? FALSE : TRUE;
print_file(file, indent, "NdrClientContextMarshall(\n");
print_file(file, indent + 1, "&_StubMsg,\n");
print_file(file, indent + 1, "&__frame->_StubMsg,\n");
print_file(file, indent + 1, "(NDR_CCONTEXT)%s%s,\n", is_ch_ptr ? "*" : "", var->name);
print_file(file, indent + 1, "%s);\n", in_attr && out_attr ? "1" : "0");
}
else
{
print_file(file, indent, "NdrServerContextNewMarshall(\n");
print_file(file, indent + 1, "&_StubMsg,\n");
print_file(file, indent + 1, "&__frame->_StubMsg,\n");
print_file(file, indent + 1, "(NDR_SCONTEXT)%s,\n", var->name);
print_file(file, indent + 1, "(NDR_RUNDOWN)%s_rundown,\n", get_context_handle_type_name(var->type));
print_file(file, indent + 1, "(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%d]);\n", start_offset);
@ -2920,14 +2920,14 @@ static void write_remoting_arg(FILE *file, int indent, const func_t *func,
if (!in_attr)
print_file(file, indent, "*%s = 0;\n", var->name);
print_file(file, indent, "NdrClientContextUnmarshall(\n");
print_file(file, indent + 1, "&_StubMsg,\n");
print_file(file, indent + 1, "&__frame->_StubMsg,\n");
print_file(file, indent + 1, "(NDR_CCONTEXT *)%s,\n", var->name);
print_file(file, indent + 1, "_Handle);\n");
}
else
{
print_file(file, indent, "%s = NdrServerContextNewUnmarshall(\n", var->name);
print_file(file, indent + 1, "&_StubMsg,\n");
print_file(file, indent + 1, "&__frame->_StubMsg,\n");
print_file(file, indent + 1, "(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%d]);\n", start_offset);
}
}
@ -2989,7 +2989,7 @@ static void write_remoting_arg(FILE *file, int indent, const func_t *func,
{
print_file(file, indent, "if (%s)\n", var->name);
indent++;
print_file(file, indent, "_StubMsg.pfnFree(%s);\n", var->name);
print_file(file, indent, "__frame->_StubMsg.pfnFree(%s);\n", var->name);
}
}
}
@ -3031,7 +3031,7 @@ static void write_remoting_arg(FILE *file, int indent, const func_t *func,
expr_t *iid;
if ((iid = get_attrp( var->attrs, ATTR_IIDIS )))
{
print_file( file, indent, "_StubMsg.MaxCount = (unsigned long) " );
print_file( file, indent, "__frame->_StubMsg.MaxCount = (unsigned long) " );
write_expr( file, iid, 1, 1, NULL, NULL );
fprintf( file, ";\n\n" );
}
@ -3071,7 +3071,7 @@ void write_remoting_arguments(FILE *file, int indent, const func_t *func,
if (phase == PHASE_BUFFERSIZE && pass != PASS_RETURN)
{
unsigned int size = get_function_buffer_size( func, pass );
print_file(file, indent, "_StubMsg.BufferLength = %u;\n", size);
print_file(file, indent, "__frame->_StubMsg.BufferLength = %u;\n", size);
}
if (pass == PASS_RETURN)
@ -3234,7 +3234,7 @@ void assign_stub_out_args( FILE *file, int indent, const func_t *func )
if (is_context_handle(var->type))
{
fprintf(file, " = NdrContextHandleInitialize(\n");
print_file(file, indent + 1, "&_StubMsg,\n");
print_file(file, indent + 1, "&__frame->_StubMsg,\n");
print_file(file, indent + 1, "(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%d]);\n",
var->type->typestring_offset);
}
@ -3243,7 +3243,7 @@ void assign_stub_out_args( FILE *file, int indent, const func_t *func )
unsigned int size, align = 0;
type_t *type = var->type;
fprintf(file, " = NdrAllocate(&_StubMsg, ");
fprintf(file, " = NdrAllocate(&__frame->_StubMsg, ");
for ( ; type->size_is ; type = type->ref)
{
write_expr(file, type->size_is, TRUE, TRUE, NULL, NULL);