From: Kevin Day Date: Tue, 3 Jun 2025 03:49:25 +0000 (-0500) Subject: Bugfix: Directory recursion is losing the error state. X-Git-Url: https://git.kevux.org/?a=commitdiff_plain;p=fll 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. --- 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; } }