From 5137f3b59c7b36b7007b2fab4a9ff64b844f0db9 Mon Sep 17 00:00:00 2001 From: Kevin Day Date: Mon, 2 Jun 2025 22:49:25 -0500 Subject: [PATCH] Bugfix: Directory recursion is losing the error state. The stream is being closed at the end of the directory recursion regardless of the error state. This ends up overwriting the status code. Preserve the status code before closing the stream. Process the stream close. Then restore the original status if the original status has an error or if the stream close worked. --- level_1/fl_directory/c/private-directory.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/level_1/fl_directory/c/private-directory.c b/level_1/fl_directory/c/private-directory.c index 7d2385f..b9097c7 100644 --- a/level_1/fl_directory/c/private-directory.c +++ b/level_1/fl_directory/c/private-directory.c @@ -169,14 +169,22 @@ extern "C" { if (recurse->state.status == F_continue) continue; } // for - recurse->state.status = f_directory_stream_close(stream); + { + const f_status_t status_original = recurse->state.status; - if (F_status_is_error(recurse->state.status)) { - private_inline_fl_directory_do_handle(recurse, recurse->path, f_directory_recurse_do_flag_clean_list_d); - if (F_status_is_error(recurse->state.status)) return; + recurse->state.status = f_directory_stream_close(stream); - if (recurse->state.status != F_done) { - recurse->state.status = F_okay; + if (F_status_is_error(recurse->state.status)) { + private_inline_fl_directory_do_handle(recurse, recurse->path, f_directory_recurse_do_flag_clean_list_d); + if (F_status_is_error(recurse->state.status)) return; + + if (recurse->state.status != F_done) { + recurse->state.status = F_okay; + } + } + + if (F_status_is_error(status_original) || F_status_is_error_not(recurse->state.status)) { + recurse->state.status = status_original; } } -- 1.8.3.1