Sebastian Lackner : wineconsole: Consistently return nonzero exitcode on error.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Jul 30 17:10:04 CDT 2015


Module: wine
Branch: master
Commit: 29b55a5cae70c270a2b02b0ab25a4674f0ebea5a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=29b55a5cae70c270a2b02b0ab25a4674f0ebea5a

Author: Sebastian Lackner <sebastian at fds-team.de>
Date:   Thu Jul 30 07:34:34 2015 +0200

wineconsole: Consistently return nonzero exitcode on error.

---

 programs/wineconsole/curses.c      |  2 +-
 programs/wineconsole/user.c        |  2 +-
 programs/wineconsole/wineconsole.c | 32 +++++++++++++++++---------------
 3 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/programs/wineconsole/curses.c b/programs/wineconsole/curses.c
index 2903b80..7413c8f 100644
--- a/programs/wineconsole/curses.c
+++ b/programs/wineconsole/curses.c
@@ -1018,7 +1018,7 @@ static int WCCURSES_MainLoop(struct inner_data* data)
 
     WCCURSES_Resize(data);
 
-    if (pipe( PRIVATE(data)->sync_pipe ) == -1) return 0;
+    if (pipe( PRIVATE(data)->sync_pipe ) == -1) return 1;
     PRIVATE(data)->input_thread = CreateThread( NULL, 0, input_thread, data, 0, &id );
 
     while (!data->dying && WaitForSingleObject(data->hSynchro, INFINITE) == WAIT_OBJECT_0)
diff --git a/programs/wineconsole/user.c b/programs/wineconsole/user.c
index 5c8c2c0..4725ebd 100644
--- a/programs/wineconsole/user.c
+++ b/programs/wineconsole/user.c
@@ -1382,7 +1382,7 @@ static int WCUSER_MainLoop(struct inner_data* data)
 	     * so GetMessage would lead to delayed processing */
             while (PeekMessageW(&msg, 0, 0, 0, PM_REMOVE))
 	    {
-                if (msg.message == WM_QUIT) return 0;
+                if (msg.message == WM_QUIT) return 1;
                 WINE_TRACE("dispatching msg %04x\n", msg.message);
                 DispatchMessageW(&msg);
 	    }
diff --git a/programs/wineconsole/wineconsole.c b/programs/wineconsole/wineconsole.c
index bdd5629..b8b517a 100644
--- a/programs/wineconsole/wineconsole.c
+++ b/programs/wineconsole/wineconsole.c
@@ -720,7 +720,7 @@ static struct inner_data* WINECON_Init(HINSTANCE hInst, DWORD pid, LPCWSTR appna
  *
  * Spawn the child process when invoked with wineconsole foo bar
  */
-static BOOL WINECON_Spawn(struct inner_data* data, LPWSTR cmdLine)
+static int WINECON_Spawn(struct inner_data* data, LPWSTR cmdLine)
 {
     PROCESS_INFORMATION info;
     STARTUPINFOW        startup;
@@ -743,20 +743,22 @@ static BOOL WINECON_Spawn(struct inner_data* data, LPWSTR cmdLine)
     {
 	WINE_ERR("Can't dup handles\n");
 	/* no need to delete handles, we're exiting the program anyway */
-	return FALSE;
+	return 1;
     }
 
     done = CreateProcessW(NULL, cmdLine, NULL, NULL, TRUE, 0L, NULL, NULL, &startup, &info);
+    if (done)
+    {
+        CloseHandle(info.hProcess);
+        CloseHandle(info.hThread);
+    }
 
     /* we no longer need the handles passed to the child for the console */
     CloseHandle(startup.hStdInput);
     CloseHandle(startup.hStdOutput);
     CloseHandle(startup.hStdError);
 
-    CloseHandle(info.hProcess);
-    CloseHandle(info.hThread);
-
-    return done;
+    return !done;
 }
 
 struct wc_init {
@@ -852,9 +854,9 @@ int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, INT nCmdSh
     {
     case from_event:
         /* case of wineconsole <evt>, signal process that created us that we're up and running */
-        if (!(data = WINECON_Init(hInst, 0, NULL, wci.backend, nCmdShow))) return 0;
-	ret = SetEvent(wci.event);
-	if (!ret) WINE_ERR("SetEvent failed.\n");
+        if (!(data = WINECON_Init(hInst, 0, NULL, wci.backend, nCmdShow))) return 1;
+        ret = !SetEvent(wci.event);
+        if (ret != 0) WINE_ERR("SetEvent failed.\n");
         break;
     case from_process_name:
         {
@@ -865,30 +867,30 @@ int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, INT nCmdSh
 
             buffer = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
             if (!buffer)
-                return 0;
+                return 1;
 
             MultiByteToWideChar(CP_ACP, 0, wci.ptr, -1, buffer, len);
 
             if (!(data = WINECON_Init(hInst, GetCurrentProcessId(), buffer, wci.backend, nCmdShow)))
             {
                 HeapFree(GetProcessHeap(), 0, buffer);
-                return 0;
+                return 1;
             }
             ret = WINECON_Spawn(data, buffer);
             HeapFree(GetProcessHeap(), 0, buffer);
-            if (!ret)
+            if (ret != 0)
             {
                 WINECON_Delete(data);
                 printf_res(IDS_CMD_LAUNCH_FAILED, wine_dbgstr_a(wci.ptr));
-                return 0;
+                return ret;
             }
         }
         break;
     default:
-        return 0;
+        return 1;
     }
 
-    if (ret)
+    if (!ret)
     {
 	WINE_TRACE("calling MainLoop.\n");
 	ret = data->fnMainLoop(data);




More information about the wine-cvs mailing list