msi: Call Custom function via wrapper.

This commit is contained in:
Marcus Meissner 2010-02-03 16:57:00 +01:00 committed by Alexandre Julliard
parent b9da31f112
commit 9fab263d39
1 changed files with 23 additions and 1 deletions

View File

@ -647,6 +647,28 @@ static UINT get_action_info( const GUID *guid, INT *type, MSIHANDLE *handle,
return ERROR_SUCCESS;
}
#ifdef __i386__
extern UINT CUSTOMPROC_wrapper( MsiCustomActionEntryPoint proc, MSIHANDLE handle );
__ASM_GLOBAL_FUNC( CUSTOMPROC_wrapper,
"pushl %ebp\n\t"
__ASM_CFI(".cfi_adjust_cfa_offset 4\n\t")
__ASM_CFI(".cfi_rel_offset %ebp,0\n\t")
"movl %esp,%ebp\n\t"
__ASM_CFI(".cfi_def_cfa_register %ebp\n\t")
"pushl 12(%ebp)\n\t"
"movl 8(%ebp),%eax\n\t"
"call *%eax\n\t"
"leave\n\t"
__ASM_CFI(".cfi_def_cfa %esp,4\n\t")
__ASM_CFI(".cfi_same_value %ebp\n\t")
"ret" )
#else
static inline UINT CUSTOMPROC_wrapper( MsiCustomActionEntryPoint proc, MSIHANDLE handle )
{
return proc(handle);
}
#endif
static DWORD ACTION_CallDllFunction( const GUID *guid )
{
MsiCustomActionEntryPoint fn;
@ -685,7 +707,7 @@ static DWORD ACTION_CallDllFunction( const GUID *guid )
__TRY
{
r = fn( hPackage );
r = CUSTOMPROC_wrapper( fn, hPackage );
}
__EXCEPT_PAGE_FAULT
{