From feee25805ef1d09101c0bfc792dc55607a0da3ea Mon Sep 17 00:00:00 2001 From: Kevin Day Date: Fri, 18 Apr 2025 21:19:11 -0500 Subject: [PATCH] Bugfix: The fl_directory_do() needs to always process at the top level. The top level directory is not being processed when the depth is less than the max depth. Make sure to add the directory flag as well. --- level_1/fl_directory/c/directory.c | 47 +++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/level_1/fl_directory/c/directory.c b/level_1/fl_directory/c/directory.c index ddf2080..a046944 100644 --- a/level_1/fl_directory/c/directory.c +++ b/level_1/fl_directory/c/directory.c @@ -122,37 +122,38 @@ extern "C" { return; } } - else { - const uint32_t flag_actions[] = { - recurse->flag & f_directory_recurse_do_flag_before_d ? f_directory_recurse_do_flag_before_d : 0, - f_directory_recurse_do_flag_action_d, - recurse->flag & f_directory_recurse_do_flag_after_d ? f_directory_recurse_do_flag_after_d : 0, - }; - uint8_t action = 0; + const uint32_t flag_actions[] = { + recurse->flag & f_directory_recurse_do_flag_before_d ? f_directory_recurse_do_flag_before_d : 0, + f_directory_recurse_do_flag_action_d, + recurse->flag & f_directory_recurse_do_flag_after_d ? f_directory_recurse_do_flag_after_d : 0, + }; - for (action = 0; action < 3; ++action) { + uint8_t action = 0; - if (recurse->state.interrupt) { - recurse->state.interrupt((void *) &recurse->state, (void *) recurse); - if (F_status_set_fine(recurse->state.status) == F_interrupt) break; - } + recurse->depth = 0; - if (flag_actions[action]) { - recurse->state.status = F_okay; + for (action = 0; action < 3; ++action) { - recurse->action(recurse, path, flag_actions[action] | recurse->flag); + if (recurse->state.interrupt) { + recurse->state.interrupt((void *) &recurse->state, (void *) recurse); + if (F_status_set_fine(recurse->state.status) == F_interrupt) break; + } - if (F_status_is_error(recurse->state.status)) { - private_inline_fl_directory_do_handle(recurse, path, flag_actions[action] | recurse->flag); - if (F_status_is_error(recurse->state.status)) break; - } + if (flag_actions[action]) { + recurse->state.status = F_okay; - // There is nothing to continue onto, so all of these result in a break out of the loop. - if (recurse->state.status == F_break || recurse->state.status == F_done || recurse->state.status == F_continue || F_status_set_fine(recurse->state.status) == F_interrupt) break; + recurse->action(recurse, path, flag_actions[action] | recurse->flag | f_directory_recurse_do_flag_directory_d); + + if (F_status_is_error(recurse->state.status)) { + private_inline_fl_directory_do_handle(recurse, path, flag_actions[action] | recurse->flag | f_directory_recurse_do_flag_directory_d); + if (F_status_is_error(recurse->state.status)) break; } - } // for - } + + // There is nothing to continue onto, so all of these result in a break out of the loop. + if (recurse->state.status == F_break || recurse->state.status == F_done || recurse->state.status == F_continue || F_status_set_fine(recurse->state.status) == F_interrupt) break; + } + } // for recurse->state.status = F_okay; } -- 1.8.3.1