Alexandre Julliard : winetest: Report an error when a test program completely fails to run.

Alexandre Julliard julliard at winehq.org
Wed Nov 19 08:35:00 CST 2008


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Nov 19 13:24:43 2008 +0100

winetest: Report an error when a test program completely fails to run.

---

 programs/winetest/main.c |   36 +++++++++++++++++++++++++++---------
 1 files changed, 27 insertions(+), 9 deletions(-)

diff --git a/programs/winetest/main.c b/programs/winetest/main.c
index 30ed15b..9623039 100644
--- a/programs/winetest/main.c
+++ b/programs/winetest/main.c
@@ -349,15 +349,15 @@ run_ex (char *cmd, HANDLE out_file, const char *tempdir, DWORD ms)
     return status;
 }
 
-static void
+static DWORD
 get_subtests (const char *tempdir, struct wine_test *test, LPTSTR res_name)
 {
     char *cmd;
     HANDLE subfile;
-    DWORD total;
+    DWORD err, total;
     char buffer[8192], *index;
     static const char header[] = "Valid test names:";
-    int allocated;
+    int status, allocated;
     char tmpdir[MAX_PATH], subname[MAX_PATH];
     SECURITY_ATTRIBUTES sa;
 
@@ -384,6 +384,7 @@ get_subtests (const char *tempdir, struct wine_test *test, LPTSTR res_name)
                            &sa, CREATE_ALWAYS, 0, NULL );
     }
     if (subfile == INVALID_HANDLE_VALUE) {
+        err = GetLastError();
         report (R_ERROR, "Can't open subtests output of %s: %u",
                 test->name, GetLastError());
         goto quit;
@@ -391,15 +392,23 @@ get_subtests (const char *tempdir, struct wine_test *test, LPTSTR res_name)
 
     extract_test (test, tempdir, res_name);
     cmd = strmake (NULL, "%s --list", test->exename);
-    run_ex (cmd, subfile, tempdir, 5000);
+    status = run_ex (cmd, subfile, tempdir, 5000);
+    err = GetLastError();
     free (cmd);
 
+    if (status == -2)
+    {
+        report (R_ERROR, "Cannot run %s error %u", test->exename, err);
+        goto quit;
+    }
+
     SetFilePointer( subfile, 0, NULL, FILE_BEGIN );
     ReadFile( subfile, buffer, sizeof(buffer), &total, NULL );
     CloseHandle( subfile );
     if (sizeof buffer == total) {
         report (R_ERROR, "Subtest list of %s too big.",
                 test->name, sizeof buffer);
+        err = ERROR_OUTOFMEMORY;
         goto quit;
     }
     buffer[total] = 0;
@@ -408,6 +417,7 @@ get_subtests (const char *tempdir, struct wine_test *test, LPTSTR res_name)
     if (!index) {
         report (R_ERROR, "Can't parse subtests output of %s",
                 test->name);
+        err = ERROR_INTERNAL_ERROR;
         goto quit;
     }
     index += sizeof header;
@@ -427,10 +437,12 @@ get_subtests (const char *tempdir, struct wine_test *test, LPTSTR res_name)
     }
     test->subtests = xrealloc (test->subtests,
                                test->subtest_count * sizeof(char*));
+    err = 0;
 
  quit:
     if (!DeleteFileA (subname))
         report (R_WARNING, "Can't delete file '%s': %u", subname, GetLastError());
+    return err;
 }
 
 static void
@@ -461,6 +473,7 @@ extract_test_proc (HMODULE hModule, LPCTSTR lpszType,
     const char *tempdir = (const char *)lParam;
     char dllname[MAX_PATH];
     HMODULE dll;
+    DWORD err;
 
     if (test_filtered_out( lpszName, NULL )) return TRUE;
 
@@ -476,11 +489,16 @@ extract_test_proc (HMODULE hModule, LPCTSTR lpszType,
     }
     FreeLibrary(dll);
 
-    xprintf ("    %s=%s\n", dllname, get_file_version(dllname));
-
-    get_subtests( tempdir, &wine_tests[nr_of_files], lpszName );
-    nr_of_tests += wine_tests[nr_of_files].subtest_count;
-    nr_of_files++;
+    if (!(err = get_subtests( tempdir, &wine_tests[nr_of_files], lpszName )))
+    {
+        xprintf ("    %s=%s\n", dllname, get_file_version(dllname));
+        nr_of_tests += wine_tests[nr_of_files].subtest_count;
+        nr_of_files++;
+    }
+    else
+    {
+        xprintf ("    %s=load error %u\n", dllname, err);
+    }
     return TRUE;
 }
 




More information about the wine-cvs mailing list