From: Kevin Day Date: Thu, 30 Jan 2025 05:45:55 +0000 (-0600) Subject: Update: Switch to typedef struct approach for safer callbacks inside structure f_dire... X-Git-Url: https://git.kevux.org/?a=commitdiff_plain;h=fa45c2eda7d7ce83915bb26d819aa590620c869d;p=fll Update: Switch to typedef struct approach for safer callbacks inside structure f_directory_recurse_do_t. Update all of the files and callbacks. --- diff --git a/level_0/f_directory/c/directory/recurse_do.h b/level_0/f_directory/c/directory/recurse_do.h index 4026d5f..2ae300e 100644 --- a/level_0/f_directory/c/directory/recurse_do.h +++ b/level_0/f_directory/c/directory/recurse_do.h @@ -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, \ diff --git a/level_1/fl_directory/c/directory.c b/level_1/fl_directory/c/directory.c index 4816021..521689f 100644 --- a/level_1/fl_directory/c/directory.c +++ b/level_1/fl_directory/c/directory.c @@ -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)) { diff --git a/level_1/fl_directory/c/private-directory.c b/level_1/fl_directory/c/private-directory.c index a720f54..48677d5 100644 --- a/level_1/fl_directory/c/private-directory.c +++ b/level_1/fl_directory/c/private-directory.c @@ -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); diff --git a/level_3/fake/c/main/fake/do.c b/level_3/fake/c/main/fake/do.c index efbc860..c367a57 100644 --- a/level_3/fake/c/main/fake/do.c +++ b/level_3/fake/c/main/fake/do.c @@ -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; diff --git a/level_3/fake/c/main/fake/do.h b/level_3/fake/c/main/fake/do.h index 0d8e099..11ea040 100644 --- a/level_3/fake/c/main/fake/do.h +++ b/level_3/fake/c/main/fake/do.h @@ -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