X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=test.c;h=7006b4a5bc2011c256de9c99656322f0c5fbb952;hp=e4873e0e83d79fa1d8d3f1b59add6aa6b7ba813e;hb=f4f805f4c980f5e509447a965b4ef811c0741581;hpb=772dbfae26460d361ba0ee60e3becc377517b099 diff --git a/test.c b/test.c index e4873e0..7006b4a 100644 --- a/test.c +++ b/test.c @@ -166,8 +166,8 @@ static int task_pclose(FILE **handles) { tmpnam(open->name_err); tmpnam(open->name_out); #else - tmpnam_s(open->name_err, L_tmpnam); - tmpnam_s(open->name_out, L_tmpnam); + tmpnam_s(open->name_err, L_tmpnam); + tmpnam_s(open->name_out, L_tmpnam); #endif (void)mode; /* excluded */ @@ -184,7 +184,7 @@ static int task_pclose(FILE **handles) { return open->handles; } - static void task_pclose(FILE **files) { + static int task_pclose(FILE **files) { popen_t *open = ((popen_t*)files); fs_file_close(files[1]); fs_file_close(files[2]); @@ -192,9 +192,11 @@ static int task_pclose(FILE **handles) { remove(open->name_out); mem_d(open); + + return EXIT_SUCCESS; } -# define popen _popen -# define pclose _pclose +# define popen _popen +# define pclose _pclose #endif /*! _WIN32 */ #define TASK_COMPILE 0 @@ -684,7 +686,7 @@ static bool task_propagate(const char *curdir, size_t *pad, const char *defs) { char **directories = NULL; char *claim = util_strdup(curdir); size_t i; - + vec_push(directories, claim); dir = fs_dir_open(claim); @@ -716,7 +718,7 @@ static bool task_propagate(const char *curdir, size_t *pad, const char *defs) { */ for (i = 0; i < vec_size(directories); i++) { dir = fs_dir_open(directories[i]); - + while ((files = fs_dir_read(dir))) { util_snprintf(buffer, sizeof(buffer), "%s/%s", directories[i], files->d_name); if (stat(buffer, &directory) == -1) { @@ -871,7 +873,7 @@ static bool task_propagate(const char *curdir, size_t *pad, const char *defs) { vec_push(task_tasks, task); } } - + fs_dir_close(dir); mem_d(directories[i]); /* free claimed memory */ } @@ -964,10 +966,11 @@ static void task_destroy(void) { static bool task_trymatch(size_t i, char ***line) { bool success = true; bool process = true; + int retval = EXIT_SUCCESS; FILE *execute; char buffer[4096]; task_template_t *tmpl = task_tasks[i].tmpl; - + memset (buffer,0,sizeof(buffer)); if (!strcmp(tmpl->proceduretype, "-execute")) { @@ -1013,7 +1016,7 @@ static bool task_trymatch(size_t i, char ***line) { */ if (!(execute = fs_file_open(task_tasks[i].stderrlogfile, "r"))) return false; - + process = false; } @@ -1025,7 +1028,7 @@ static bool task_trymatch(size_t i, char ***line) { char *data = NULL; size_t size = 0; size_t compare = 0; - + while (fs_file_getline(&data, &size, execute) != EOF) { if (!strcmp(data, "No main function found\n")) { con_err("test failure: `%s` (No main function found) [%s]\n", @@ -1045,7 +1048,7 @@ static bool task_trymatch(size_t i, char ***line) { */ if (strrchr(data, '\n')) *strrchr(data, '\n') = '\0'; - + /* * We remove the file/directory and stuff from the error * match messages when testing diagnostics. @@ -1085,16 +1088,20 @@ static bool task_trymatch(size_t i, char ***line) { data = NULL; size = 0; } + + if (compare != vec_size(tmpl->comparematch)) + success = false; + mem_d(data); data = NULL; } if (process) - pclose(execute); + retval = pclose(execute); else fs_file_close(execute); - return success; + return success && retval == EXIT_SUCCESS; } static const char *task_type(task_template_t *tmpl) { @@ -1139,7 +1146,7 @@ static size_t task_schedualize(size_t *pad) { * Generate a task from thin air if it requires execution in * the QCVM. */ - + /* diagnostic is not executed, but compare tested instead, like preproessor */ execute = !! (!strcmp(task_tasks[i].tmpl->proceduretype, "-execute")) || (!strcmp(task_tasks[i].tmpl->proceduretype, "-pp")) || @@ -1270,7 +1277,7 @@ static size_t task_schedualize(size_t *pad) { failed++; continue; } - + for (j = 0; j < vec_size(match); j++) mem_d(match[j]); vec_free(match); @@ -1419,6 +1426,5 @@ int main(int argc, char **argv) { succeed = test_perform("tests", defs); stat_info(); - return (succeed) ? EXIT_SUCCESS : EXIT_FAILURE; }