]> Kevux Git Server - fll/commitdiff
Bugfix: The fl_directory_do() needs to always process at the top level.
authorKevin Day <Kevin@kevux.org>
Sat, 19 Apr 2025 02:19:11 +0000 (21:19 -0500)
committerKevin Day <Kevin@kevux.org>
Sat, 19 Apr 2025 02:19:11 +0000 (21:19 -0500)
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

index ddf20805339c26148c8a48cc9680a8af9838d986..a04694434031d36136526c2ebabb7485ef6f99be 100644 (file)
@@ -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;
   }