Return exit code as signed integer from wxExecute(wxEXEC_SYNC).
The caller expects the function to return -1 if the child process exited with -1 error code and not 255 that was returned before. The function is also documented as returning -1 if the execution fails which wasn't true neither. Fix this by explicitly handling the exit code as signed. Closes #11824. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63710 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
0772a89875
commit
34e3a8105d
@ -441,6 +441,7 @@ All:
|
|||||||
|
|
||||||
Unix:
|
Unix:
|
||||||
|
|
||||||
|
- Return signed return code from wxExecute(wxEXEC_SYNC).
|
||||||
- Allow to use WX_APPNAME_DATA_DIR environment var to override the return value
|
- Allow to use WX_APPNAME_DATA_DIR environment var to override the return value
|
||||||
of wxStandardPaths::GetDataDir().
|
of wxStandardPaths::GetDataDir().
|
||||||
|
|
||||||
|
@ -1373,15 +1373,21 @@ int DoWaitForChild(int pid, int flags = 0)
|
|||||||
{
|
{
|
||||||
wxASSERT_MSG( rc == pid, "unexpected waitpid() return value" );
|
wxASSERT_MSG( rc == pid, "unexpected waitpid() return value" );
|
||||||
|
|
||||||
|
// notice that the caller expects the exit code to be signed, e.g. -1
|
||||||
|
// instead of 255 so don't assign WEXITSTATUS() to an int
|
||||||
|
signed char exitcode;
|
||||||
if ( WIFEXITED(status) )
|
if ( WIFEXITED(status) )
|
||||||
return WEXITSTATUS(status);
|
exitcode = WEXITSTATUS(status);
|
||||||
else if ( WIFSIGNALED(status) )
|
else if ( WIFSIGNALED(status) )
|
||||||
return -WTERMSIG(status);
|
exitcode = -WTERMSIG(status);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wxLogError("Child process (PID %d) exited for unknown reason, "
|
wxLogError("Child process (PID %d) exited for unknown reason, "
|
||||||
"status = %d", pid, status);
|
"status = %d", pid, status);
|
||||||
|
exitcode = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return exitcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user