Martin Storsjo <martin(a)martin.st> writes:
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c index 053c87da83..a89ff20fd6 100644 --- a/dlls/ntdll/signal_i386.c +++ b/dlls/ntdll/signal_i386.c @@ -2817,6 +2817,9 @@ void signal_exit_thread( int status ) */ void signal_exit_process( int status ) { + /* Prevent a nonzero exit code to end up truncated to zero in unix. */ + if (status != 0 && (status & 0xff) == 0) + status = 1; call_thread_exit_func( status, exit ); }
diff --git a/dlls/ntdll/signal_powerpc.c b/dlls/ntdll/signal_powerpc.c index 86398d8f54..a5cce9bae3 100644 --- a/dlls/ntdll/signal_powerpc.c +++ b/dlls/ntdll/signal_powerpc.c @@ -1240,6 +1240,9 @@ void signal_exit_thread( int status ) */ void signal_exit_process( int status ) { + /* Prevent a nonzero exit code to end up truncated to zero in unix. */ + if (status != 0 && (status & 0xff) == 0) + status = 1; exit( status ); }
You could probably do that in the caller instead of duplicating it into every CPU backend. -- Alexandre Julliard julliard(a)winehq.org