[PATCH] ntdll: Avoid truncating a nonzero exit code to zero in unix

Alexandre Julliard julliard at winehq.org
Tue May 14 13:33:19 CDT 2019


Martin Storsjo <martin at 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 at winehq.org



More information about the wine-devel mailing list