]> Kevux Git Server - fll/commitdiff
Update: Switch to typedef struct approach for safer callbacks inside structure f_dire...
authorKevin Day <Kevin@kevux.org>
Thu, 30 Jan 2025 05:45:55 +0000 (23:45 -0600)
committerKevin Day <Kevin@kevux.org>
Thu, 30 Jan 2025 05:45:55 +0000 (23:45 -0600)
Update all of the files and callbacks.

level_0/f_directory/c/directory/recurse_do.h
level_1/fl_directory/c/directory.c
level_1/fl_directory/c/private-directory.c
level_3/fake/c/main/fake/do.c
level_3/fake/c/main/fake/do.h

index 4026d5f9d6d07506f2591519b994736fc74ed9a6..2ae300e39a8ffcc33d19bb50ee6c4c96c4dcf258 100644 (file)
@@ -57,7 +57,9 @@ extern "C" {
  * The macro_f_directory_recurse_do_t_initialize_2() all arguments except for internally managed source, destination, mode, and depth.
  */
 #ifndef _di_f_directory_recurse_do_t_
-  typedef struct {
+  typedef struct f_directory_recurse_do_t_ f_directory_recurse_do_t;
+
+  struct f_directory_recurse_do_t_ {
     f_number_unsigned_t depth;
     f_number_unsigned_t depth_max;
     uint16_t flag;
@@ -70,9 +72,9 @@ extern "C" {
     f_string_dynamic_t path_cache;
     const f_string_static_t *path_top;
 
-    void (*action)(void * const recurse, const f_string_static_t name, const uint16_t flag);
-    void (*handle)(void * const recurse, const f_string_static_t name, const uint16_t flag);
-  } f_directory_recurse_do_t;
+    void (*action)(f_directory_recurse_do_t * const recurse, const f_string_static_t name, const uint16_t flag);
+    void (*handle)(f_directory_recurse_do_t * const recurse, const f_string_static_t name, const uint16_t flag);
+  } ;
 
   #define f_directory_recurse_do_t_initialize { \
     0, \
index 48160219e29ece5daf11d890ed2d466097603abc..521689f9749322937dd8143d6643ecf78f26288e 100644 (file)
@@ -103,7 +103,7 @@ extern "C" {
     if ((recurse->flag & f_directory_recurse_do_flag_top_e) && (recurse->flag & f_directory_recurse_do_flag_before_e)) {
       recurse->state.status = F_okay;
 
-      recurse->action((void *) recurse, path, f_directory_recurse_do_flag_top_e | f_directory_recurse_do_flag_path_e | f_directory_recurse_do_flag_before_e);
+      recurse->action(recurse, path, f_directory_recurse_do_flag_top_e | f_directory_recurse_do_flag_path_e | f_directory_recurse_do_flag_before_e);
 
       if (F_status_is_error(recurse->state.status)) {
         private_inline_fl_directory_do_handle(recurse, path, f_directory_recurse_do_flag_top_e | f_directory_recurse_do_flag_path_e | f_directory_recurse_do_flag_before_e);
@@ -149,7 +149,7 @@ extern "C" {
 
       recurse->state.status = F_okay;
 
-      recurse->action((void *) recurse, path, f_directory_recurse_do_flag_top_e | f_directory_recurse_do_flag_directory_e);
+      recurse->action(recurse, path, f_directory_recurse_do_flag_top_e | f_directory_recurse_do_flag_directory_e);
 
       if (F_status_is_error(recurse->state.status)) {
         private_inline_fl_directory_do_handle(recurse, path, f_directory_recurse_do_flag_top_e | f_directory_recurse_do_flag_directory_e);
@@ -166,7 +166,7 @@ extern "C" {
     if ((recurse->flag & f_directory_recurse_do_flag_top_e) && (recurse->flag & f_directory_recurse_do_flag_after_e)) {
       recurse->state.status = F_okay;
 
-      recurse->action((void *) recurse, path, f_directory_recurse_do_flag_top_e | f_directory_recurse_do_flag_path_e | f_directory_recurse_do_flag_after_e);
+      recurse->action(recurse, path, f_directory_recurse_do_flag_top_e | f_directory_recurse_do_flag_path_e | f_directory_recurse_do_flag_after_e);
     }
 
     if (F_status_is_error(recurse->state.status)) {
index a720f54e24fe7f3193f3cb409ee7fb44b4fe0ee5..48677d5bc36110459e5db5a75a2de2a2450d65a4 100644 (file)
@@ -48,7 +48,7 @@ extern "C" {
     recurse->state.status = F_okay;
 
     if (recurse->flag & f_directory_recurse_do_flag_list_e) {
-      recurse->action((void *) recurse, recurse->path, f_directory_recurse_do_flag_list_e);
+      recurse->action(recurse, recurse->path, f_directory_recurse_do_flag_list_e);
 
       if (F_status_is_error(recurse->state.status)) {
         private_inline_fl_directory_do_handle(recurse, recurse->path, f_directory_recurse_do_flag_list_e);
@@ -129,7 +129,7 @@ extern "C" {
             if (!flag_actions[j] || (recurse->flag & flag_actions[j])) {
               recurse->state.status = F_okay;
 
-              recurse->action((void *) recurse, list[k]->array[i], flag_actions[j] | flags[k]);
+              recurse->action(recurse, list[k]->array[i], flag_actions[j] | flags[k]);
 
               if (F_status_is_error(recurse->state.status)) {
                 private_inline_fl_directory_do_handle(recurse, recurse->listing.directory.array[i], f_directory_recurse_do_flag_before_e | flags[k]);
@@ -193,7 +193,7 @@ extern "C" {
 
           if (flag_actions[j]) {
             if (recurse->flag & flag_actions[j]) {
-              recurse->action((void *) recurse, recurse->listing.directory.array[i], flag_actions[j] | f_directory_recurse_do_flag_directory_e);
+              recurse->action(recurse, recurse->listing.directory.array[i], flag_actions[j] | f_directory_recurse_do_flag_directory_e);
 
               if (F_status_is_error(recurse->state.status)) {
                 private_inline_fl_directory_do_handle(recurse, recurse->listing.directory.array[i], flag_actions[j] | f_directory_recurse_do_flag_directory_e);
@@ -214,7 +214,7 @@ extern "C" {
               if (F_status_is_error(recurse->state.status)) break;
             }
             else {
-              recurse->action((void *) recurse, recurse->listing.directory.array[i], f_directory_recurse_do_flag_directory_e);
+              recurse->action(recurse, recurse->listing.directory.array[i], f_directory_recurse_do_flag_directory_e);
 
               if (F_status_is_error(recurse->state.status)) {
                 private_inline_fl_directory_do_handle(recurse, recurse->listing.directory.array[i], f_directory_recurse_do_flag_directory_e);
index efbc8600184d9b19377f77bc2306fc127daf64db..c367a57d1d3be8bedada07457432f8d8a1b5ae65 100644 (file)
@@ -5,15 +5,19 @@ extern "C" {
 #endif
 
 #ifndef _di_fake_do_copy_action_
-  void fake_do_copy_action(void * const void_recurse, const f_string_static_t name, const uint16_t flag) {
+  void fake_do_copy_action(f_directory_recurse_do_t * const recurse, const f_string_static_t name, const uint16_t flag) {
 
-    if (!void_recurse) return;
+    if (!recurse || !recurse->state.custom) return;
 
-    f_directory_recurse_do_t * const recurse = (f_directory_recurse_do_t *) void_recurse;
+    fake_local_t * const local = (fake_local_t *) recurse->state.custom;
 
-    if (!recurse->state.custom) return;
+    if (!local->main) return;
 
-    fake_local_t * const local = (fake_local_t *) recurse->state.custom;
+    if (fake_signal_check(local->main)) {
+      recurse->state.status = F_status_set_error(F_interrupt);
+
+      return;
+    }
 
     if (!local->custom_1) {
       recurse->state.status = F_status_set_error(F_parameter);
@@ -166,16 +170,9 @@ extern "C" {
 #endif // _di_fake_do_copy_action_
 
 #ifndef _di_fake_do_copy_handle_
-  void fake_do_copy_handle(void * const void_recurse, const f_string_static_t name, const uint16_t flag) {
-
-    if (!void_recurse) return;
-
-    f_directory_recurse_do_t * const recurse = (f_directory_recurse_do_t *) void_recurse;
-
-    // Do not print any errors on interrupts.
-    if (F_status_set_fine(recurse->state.status) == F_interrupt) return;
+  void fake_do_copy_handle(f_directory_recurse_do_t * const recurse, const f_string_static_t name, const uint16_t flag) {
 
-    if (!recurse->state.custom) return;
+    if (!recurse || !recurse->state.custom || F_status_set_fine(recurse->state.status) == F_interrupt) return;
 
     fake_local_t * const local = (fake_local_t *) recurse->state.custom;
 
index 0d8e099c0d79cda69470a0452b07e511c79e3ac3..11ea04052c9fcf4e1027927f8e9f97b6d2cd490f 100644 (file)
@@ -23,7 +23,8 @@ extern "C" {
  *
  * @param recurse
  *   The recuse structure.
- *   Must be of type f_directory_recurse_do_t.
+ *
+ *   Must not be NULL.
  *
  *   The recurse.state.code relevant flags:
  *     - fake_state_code_clone_d: Designate that this is a clone instead of copy.
@@ -53,7 +54,7 @@ extern "C" {
  * @see fake_build_copy()
  */
 #ifndef _di_fake_do_copy_action_
-  extern void fake_do_copy_action(void * const recurse, const f_string_static_t name, const uint16_t flag);
+  extern void fake_do_copy_action(f_directory_recurse_do_t * const recurse, const f_string_static_t name, const uint16_t flag);
 #endif // _di_fake_do_copy_action_
 
 /**
@@ -63,7 +64,8 @@ extern "C" {
  *
  * @param recurse
  *   The recuse structure.
- *   Must be of type f_directory_recurse_do_t.
+ *
+ *   Must not be NULL.
  *
  *   The recurse.state.code relevant flags:
  *     - fake_state_code_clone_d: Designate that this is a clone instead of copy.
@@ -79,7 +81,7 @@ extern "C" {
  *   The flags representing the action.
  */
 #ifndef _di_fake_do_copy_handle_
-  extern void fake_do_copy_handle(void * const recurse, const f_string_static_t name, const uint16_t flag);
+  extern void fake_do_copy_handle(f_directory_recurse_do_t * const recurse, const f_string_static_t name, const uint16_t flag);
 #endif // _di_fake_do_copy_handle_
 
 #ifdef __cplusplus