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