[PATCH] programs/winetest: Report GetLastError() when CreateProcess() fails.

Francois Gouget fgouget at codeweavers.com
Mon Jul 5 12:07:19 CDT 2021

Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
Sometimes httpapi_test.exe fails to run but in such a case the only
information we get in the report is the run_ex() return code, -2, which
does not tell us anything about what happened:

With this patch the done line will contain the GetLastError() value
which I expect to be ERROR_FILE_NOT_FOUND (2) due to the anti-virus
quarantining our test executable.

So 'done (-2)' will be replaced by 'done (-2)' and that changes
everything ;-). I may even get 'done (-3)' one day. Weeeee!

More seriously. This value is overloaded quite a bit:
* It can be the test's exit code (a failure count).
* Or an exception 'exit code' (e.g. c0000005 -> -1073741819).
* Or a WaitForSingleObject() return value (typically 258).
* Or the CreateProcess() -GetLastError() (expecting -2 here).
But that's probably still fine.
 programs/winetest/main.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/programs/winetest/main.c b/programs/winetest/main.c
index 64a807b6c73..81c7de2a020 100644
--- a/programs/winetest/main.c
+++ b/programs/winetest/main.c
@@ -811,6 +811,7 @@ run_test (struct wine_test* test, const char* subtest, HANDLE out_file, const ch
         report (R_STEP, "Running: %s:%s", test->name, subtest);
         xprintf ("%s:%s start %s\n", test->name, subtest, file);
         status = run_ex (cmd, out_file, tempdir, 120000, FALSE, &pid);
+        if (status == -2) status = -GetLastError();
         heap_free (cmd);
         xprintf ("%s:%s:%04x done (%d) in %ds\n", test->name, subtest, pid, status, (GetTickCount()-start)/1000);
         if (status) failures++;

More information about the wine-devel mailing list