From: Kevin Day Date: Thu, 8 May 2025 23:46:36 +0000 (-0500) Subject: Bugfix: Featueless Make array cache is being reset incorrectly in some cases. X-Git-Url: https://git.kevux.org/?a=commitdiff_plain;h=c502691cff10d3c7b7213ad5b2efaa238670931d;p=fll Bugfix: Featueless Make array cache is being reset incorrectly in some cases. The functions `fake_build_library_static_object()` and `fake_build_object()` are appending compiler arguments to the arguments cache. Before this cache gets used, a for loop resets the cache and starts appending to the cache. The initial data loaded into the cache gets lost without ever being used. --- diff --git a/level_3/fake/c/main/build/library.c b/level_3/fake/c/main/build/library.c index 9cc0646..ef16ea4 100644 --- a/level_3/fake/c/main/build/library.c +++ b/level_3/fake/c/main/build/library.c @@ -627,6 +627,7 @@ extern "C" { uint8_t i = 0; f_number_unsigned_t j = 0; + f_number_unsigned_t minimum = 0; { f_string_statics_t * const values[] = { @@ -649,6 +650,8 @@ extern "C" { return 0; } + + ++minimum; } // for } // for } @@ -671,7 +674,7 @@ extern "C" { fake_string_dynamic_reset(&main->cache_1); fake_string_dynamic_reset(&main->cache_2); fake_string_dynamic_reset(&main->cache_argument); - fake_string_dynamics_reset(&main->cache_arguments); + fake_string_dynamics_reset_to(&main->cache_arguments, minimum); fake_build_path_source_string(data, data_build, &data_build->setting.path_sources_library, &main->cache_1); if (F_status_is_error(main->setting.state.status)) break; @@ -743,8 +746,7 @@ extern "C" { fake_build_print_verbose_create_directory(&main->program.message, main->cache_argument); } - - if (F_status_is_error(main->setting.state.status)) { + else if (F_status_is_error(main->setting.state.status)) { fake_print_error_file(&main->program.error, macro_fake_f(f_directory_exists), main->cache_argument, f_file_operation_create_s, fll_error_file_type_directory_e); break; diff --git a/level_3/fake/c/main/build/object.c b/level_3/fake/c/main/build/object.c index a0ec0bb..36b6704 100644 --- a/level_3/fake/c/main/build/object.c +++ b/level_3/fake/c/main/build/object.c @@ -32,6 +32,7 @@ extern "C" { uint8_t i = 0; f_number_unsigned_t j = 0; + f_number_unsigned_t minimum = 0; { f_string_statics_t * const values[] = { @@ -49,6 +50,8 @@ extern "C" { main->setting.state.status = fll_execute_arguments_add(values[i]->array[j], &main->cache_arguments); if (F_status_is_error(main->setting.state.status)) break; + + ++minimum; } // for if (F_status_is_error(main->setting.state.status)) { @@ -78,7 +81,7 @@ extern "C" { for (j = 0; j < sources[i]->used && F_status_is_error_not(main->setting.state.status); ++j) { fake_string_dynamic_reset(&main->cache_argument); - fake_string_dynamics_reset(&main->cache_arguments); + fake_string_dynamics_reset_to(&main->cache_arguments, minimum); fake_build_sources_object_add(data, data_build, &sources[i]->array[j]); diff --git a/level_3/fake/c/main/common.c b/level_3/fake/c/main/common.c index f1dc850..7b8b9ab 100644 --- a/level_3/fake/c/main/common.c +++ b/level_3/fake/c/main/common.c @@ -480,6 +480,31 @@ extern "C" { } #endif // _di_fake_string_dynamics_reset_ +#ifndef _di_fake_string_dynamics_reset_to_ + void fake_string_dynamics_reset_to(f_string_dynamics_t * const dynamics, const f_number_unsigned_t to) { + + if (!dynamics) return; + + // Shrink an overly long array. + if (to < fake_max_over_array_d && dynamics->size > fake_max_over_array_d) { + f_memory_arrays_resize( + to < fake_allocation_large_d + ? fake_allocation_large_d + : to, + sizeof(f_string_dynamic_t), + (void **) &dynamics->array, + &dynamics->used, + &dynamics->size, + &f_string_dynamics_delete_callback + ); + } + + while (dynamics->used > to) { + fake_string_dynamic_reset(&dynamics->array[--dynamics->used]); + } // while + } +#endif // _di_fake_string_dynamics_reset_to_ + #ifndef _di_fake_iki_data_reset_ void fake_iki_data_reset(f_iki_data_t * const iki_data) { diff --git a/level_3/fake/c/main/common.h b/level_3/fake/c/main/common.h index be07ce7..0309e00 100644 --- a/level_3/fake/c/main/common.h +++ b/level_3/fake/c/main/common.h @@ -110,6 +110,22 @@ extern "C" { #endif // _di_fake_string_dynamics_reset_ /** + * Reset the array of strings to a specified size, performing an over-size check and shrinking if necessary. + * + * This ignores errors when shrinking. + * + * @param dynamic + * The string to shrink. + * @param to + * The number that the dynamics.used is expected to be reset to. + * + * @see f_memory_array_resize() + */ +#ifndef _di_fake_string_dynamics_reset_to_ + extern void fake_string_dynamics_reset_to(f_string_dynamics_t * const dynamics, const f_number_unsigned_t to); +#endif // _di_fake_string_dynamics_reset_to_ + +/** * Reset the iki variable data, performing an over-size check and shrinking if necessary. * * This ignores errors when shrinking.