diff --git a/src/torture/torture.c b/src/torture/torture.c index f6a332e7..762aca4b 100644 --- a/src/torture/torture.c +++ b/src/torture/torture.c @@ -71,6 +71,33 @@ t_delete_file(String8 name) return is_deleted; } +internal void +t_delete_dir(String8 path) +{ + Temp scratch = scratch_begin(0,0); + + OS_FileIter *file_iter = os_file_iter_begin(scratch.arena, path, 0); + for (;;) { + OS_FileInfo info = {0}; + if ( ! os_file_iter_next(scratch.arena, file_iter, &info)) { break; } + + if (info.props.flags & FilePropertyFlag_IsFolder) { + t_delete_dir(str8f(scratch.arena, "%S/%S", path, info.name)); + continue; + } + + String8 file_path = str8f(scratch.arena, "%S/%S", path, info.name); + if ( ! os_delete_file_at_path(file_path)) { + fprintf(stderr, "ERROR: unable to delete file %.*s\n", str8_varg(file_path)); + } + } + os_file_iter_end(file_iter); + + // TODO: delete directories + + scratch_end(scratch); +} + internal String8 t_make_file_path(Arena *arena, String8 name) { @@ -542,7 +569,13 @@ t_entry_point(CmdLine *cmdline) // setup output directory g_wdir = push_str8f(scratch.arena, "%S\\%s", g_out, g_torture_tests[target_idx].label); g_wdir = os_full_path_from_path(scratch.arena, g_wdir); + + // delete files from last run in the work directory + if (os_folder_path_exists(g_wdir)) { + t_delete_dir(g_wdir); + } os_make_directory(g_wdir); + if (!os_folder_path_exists(g_out)) { fprintf(stderr, "ERROR: unable to create output directory for test run %.*s\n", str8_varg(g_wdir)); continue; diff --git a/src/torture/torture_radlink.c b/src/torture/torture_radlink.c index 9d724928..61a2db4c 100644 --- a/src/torture/torture_radlink.c +++ b/src/torture/torture_radlink.c @@ -4901,12 +4901,6 @@ T_BeginTest(infer_asan) #if OS_WINDOWS T_BeginTest(determ_test) { - // clean up - t_delete_file(str8_lit("a.exe")); - t_delete_file(str8_lit("b.exe")); - t_delete_file(str8_lit("a.pdb")); - t_delete_file(str8_lit("b.pdb")); - // compile the test target (torture) String8 cl_line = str8f(arena, "/fsanitize=address /c /Z7 /Fo:test.obj -I%S /Zc:preprocessor %S/torture/torture_main.c", t_src_path(), t_src_path()); String8 cl_out = {0};