wineconsole: Forward child process exitcode.
Signed-off-by: Michael Müller <michael@fds-team.de> Signed-off-by: Sebastian Lackner <sebastian@fds-team.de>
This commit is contained in:
parent
0425c0eb95
commit
5d4a961789
|
@ -59,6 +59,7 @@ struct inner_data {
|
||||||
HANDLE hConIn; /* console input handle */
|
HANDLE hConIn; /* console input handle */
|
||||||
HANDLE hConOut; /* screen buffer handle: has to be changed when active sb changes */
|
HANDLE hConOut; /* screen buffer handle: has to be changed when active sb changes */
|
||||||
HANDLE hSynchro; /* waitable handle signalled by server when something in server has been modified */
|
HANDLE hSynchro; /* waitable handle signalled by server when something in server has been modified */
|
||||||
|
HANDLE hProcess; /* handle to the child process or NULL */
|
||||||
HWND hWnd; /* handle of 'user' window or NULL for 'curses' */
|
HWND hWnd; /* handle of 'user' window or NULL for 'curses' */
|
||||||
INT nCmdShow; /* argument of WinMain */
|
INT nCmdShow; /* argument of WinMain */
|
||||||
BOOL in_set_config; /* to handle re-entrant calls to WINECON_SetConfig */
|
BOOL in_set_config; /* to handle re-entrant calls to WINECON_SetConfig */
|
||||||
|
|
|
@ -541,6 +541,7 @@ static void WINECON_Delete(struct inner_data* data)
|
||||||
if (data->hConIn) CloseHandle(data->hConIn);
|
if (data->hConIn) CloseHandle(data->hConIn);
|
||||||
if (data->hConOut) CloseHandle(data->hConOut);
|
if (data->hConOut) CloseHandle(data->hConOut);
|
||||||
if (data->hSynchro) CloseHandle(data->hSynchro);
|
if (data->hSynchro) CloseHandle(data->hSynchro);
|
||||||
|
if (data->hProcess) CloseHandle(data->hProcess);
|
||||||
HeapFree(GetProcessHeap(), 0, data->curcfg.registry);
|
HeapFree(GetProcessHeap(), 0, data->curcfg.registry);
|
||||||
HeapFree(GetProcessHeap(), 0, data->cells);
|
HeapFree(GetProcessHeap(), 0, data->cells);
|
||||||
HeapFree(GetProcessHeap(), 0, data);
|
HeapFree(GetProcessHeap(), 0, data);
|
||||||
|
@ -749,7 +750,7 @@ static int WINECON_Spawn(struct inner_data* data, LPWSTR cmdLine)
|
||||||
done = CreateProcessW(NULL, cmdLine, NULL, NULL, TRUE, 0L, NULL, NULL, &startup, &info);
|
done = CreateProcessW(NULL, cmdLine, NULL, NULL, TRUE, 0L, NULL, NULL, &startup, &info);
|
||||||
if (done)
|
if (done)
|
||||||
{
|
{
|
||||||
CloseHandle(info.hProcess);
|
data->hProcess = info.hProcess;
|
||||||
CloseHandle(info.hThread);
|
CloseHandle(info.hThread);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -892,8 +893,18 @@ int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, INT nCmdSh
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
{
|
{
|
||||||
WINE_TRACE("calling MainLoop.\n");
|
DWORD exitcode;
|
||||||
ret = data->fnMainLoop(data);
|
|
||||||
|
WINE_TRACE("calling MainLoop.\n");
|
||||||
|
ret = data->fnMainLoop(data);
|
||||||
|
|
||||||
|
if (!ret && data->hProcess &&
|
||||||
|
WaitForSingleObject(data->hProcess, INFINITE) == WAIT_OBJECT_0 &&
|
||||||
|
GetExitCodeProcess(data->hProcess, &exitcode))
|
||||||
|
{
|
||||||
|
WINE_TRACE("forwarding exitcode %u from child process\n", exitcode);
|
||||||
|
ret = exitcode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WINECON_Delete(data);
|
WINECON_Delete(data);
|
||||||
|
|
Loading…
Reference in New Issue