Module: wine Branch: master Commit: 2dc9ed3006dde794113c490ba15e06af551c8788 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2dc9ed3006dde794113c490ba1...
Author: Alexandre Julliard julliard@winehq.org Date: Wed May 7 17:33:50 2008 +0200
winedos: Print better diagnostics when a DOS app fails to start.
---
dlls/kernel32/wowthunk.c | 2 +- dlls/winedos/dosmem.c | 2 -- dlls/winedos/dosvm.c | 13 +++++++------ dlls/winedos/module.c | 20 +++++++++++++++++--- 4 files changed, 25 insertions(+), 12 deletions(-)
diff --git a/dlls/kernel32/wowthunk.c b/dlls/kernel32/wowthunk.c index 791f7cf..e86c582 100644 --- a/dlls/kernel32/wowthunk.c +++ b/dlls/kernel32/wowthunk.c @@ -593,7 +593,7 @@ BOOL WINAPI K32WOWCallback16Ex( DWORD vpfn16, DWORD dwFlags, __wine_pop_frame( &frame ); if (errno != 0) /* enter_vm86 will fall with ENOSYS on x64 kernels */ { - ERR("__wine_enter_vm86 failed (errno=%d)\n", errno); + WARN("__wine_enter_vm86 failed (errno=%d)\n", errno); if (errno == ENOSYS) SetLastError(ERROR_NOT_SUPPORTED); else diff --git a/dlls/winedos/dosmem.c b/dlls/winedos/dosmem.c index 876a3e7..76bf10c 100644 --- a/dlls/winedos/dosmem.c +++ b/dlls/winedos/dosmem.c @@ -511,8 +511,6 @@ BOOL DOSMEM_MapDosLayout(void) ERR( "Need full access to the first megabyte for DOS mode\n" ); ExitProcess(1); } - MESSAGE( "Warning: unprotecting memory to allow real-mode calls.\n" - " NULL pointer accesses will no longer be caught.\n" ); /* copy the BIOS and ISR area down */ memcpy( DOSMEM_dosmem, DOSMEM_sysmem, 0x400 + 0x100 ); DOSMEM_sysmem = DOSMEM_dosmem; diff --git a/dlls/winedos/dosvm.c b/dlls/winedos/dosvm.c index 7defba1..4a86855 100644 --- a/dlls/winedos/dosvm.c +++ b/dlls/winedos/dosvm.c @@ -569,15 +569,16 @@ static LONG WINAPI exception_handler(EXCEPTION_POINTERS *eptr) return EXCEPTION_CONTINUE_SEARCH; }
-int WINAPI DOSVM_Enter( CONTEXT86 *context ) +INT WINAPI DOSVM_Enter( CONTEXT86 *context ) { + INT ret = 0; if (!ISV86(context)) ERR( "Called with protected mode context!\n" );
__TRY { - WOWCallback16Ex( 0, WCB16_REGS, 0, NULL, (DWORD *)context ); - TRACE_(module)( "vm86 returned: %s\n", strerror(errno) ); + if (!WOWCallback16Ex( 0, WCB16_REGS, 0, NULL, (DWORD *)context )) ret = -1; + TRACE_(module)( "ret %d err %u\n", ret, GetLastError() ); } __EXCEPT(exception_handler) { @@ -585,7 +586,7 @@ int WINAPI DOSVM_Enter( CONTEXT86 *context ) } __ENDTRY
- return 0; + return ret; }
/*********************************************************************** @@ -645,8 +646,8 @@ void WINAPI DOSVM_PIC_ioport_out( WORD port, BYTE val) */ INT WINAPI DOSVM_Enter( CONTEXT86 *context ) { - ERR_(module)("DOS realmode not supported on this architecture!\n"); - return -1; + SetLastError( ERROR_NOT_SUPPORTED ); + return -1; }
/*********************************************************************** diff --git a/dlls/winedos/module.c b/dlls/winedos/module.c index ade7732..ac35e85 100644 --- a/dlls/winedos/module.c +++ b/dlls/winedos/module.c @@ -614,7 +614,7 @@ void WINAPI MZ_RunInThread( PAPCFUNC proc, ULONG_PTR arg ) static DWORD WINAPI MZ_DOSVM( LPVOID lpExtra ) { CONTEXT context; - DWORD ret; + INT ret;
dosvm_pid = getpid();
@@ -628,9 +628,23 @@ static DWORD WINAPI MZ_DOSVM( LPVOID lpExtra ) context.EFlags = V86_FLAG | VIF_MASK; DOSVM_SetTimer(0x10000); ret = DOSVM_Enter( &context ); - + if (ret == -1) + { + /* fetch the app name from the environment */ + PDB16 *psp = PTR_REAL_TO_LIN( DOSVM_psp, 0 ); + char *env = PTR_REAL_TO_LIN( psp->environment, 0 ); + while (*env) env += strlen(env) + 1; + env += 1 + sizeof(WORD); + + if (GetLastError() == ERROR_NOT_SUPPORTED) + MESSAGE( "wine: Cannot start DOS application %s\n" + " because vm86 mode is not supported on this platform.\n", + debugstr_a(env) ); + else + FIXME( "vm86 mode failed error %u\n", GetLastError() ); + } dosvm_pid = 0; - return ret; + return ret != 0; }
static BOOL MZ_InitTask(void)