From 34e3a8105dd2f30fd20d67ac93a8b1a12f396311 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Thu, 18 Mar 2010 15:51:19 +0000 Subject: [PATCH] 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 --- docs/changes.txt | 1 + src/unix/utilsunx.cpp | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 6c0fca69bc..57b498e5bc 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -441,6 +441,7 @@ All: Unix: +- Return signed return code from wxExecute(wxEXEC_SYNC). - Allow to use WX_APPNAME_DATA_DIR environment var to override the return value of wxStandardPaths::GetDataDir(). diff --git a/src/unix/utilsunx.cpp b/src/unix/utilsunx.cpp index 2e9973b6da..219c7727cb 100644 --- a/src/unix/utilsunx.cpp +++ b/src/unix/utilsunx.cpp @@ -1373,15 +1373,21 @@ int DoWaitForChild(int pid, int flags = 0) { 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) ) - return WEXITSTATUS(status); + exitcode = WEXITSTATUS(status); else if ( WIFSIGNALED(status) ) - return -WTERMSIG(status); + exitcode = -WTERMSIG(status); else { wxLogError("Child process (PID %d) exited for unknown reason, " "status = %d", pid, status); + exitcode = -1; } + + return exitcode; } return -1;