From: Kevin Day Date: Sat, 19 Apr 2025 03:06:32 +0000 (-0500) Subject: Bugfix: Properly report exists check. X-Git-Tag: 0.7.1~7 X-Git-Url: https://git.kevux.org/?a=commitdiff_plain;h=05a02497dd3f5960ae78de685c661496b3369ff3;p=kevux-tools Bugfix: Properly report exists check. The status is being changed. Use a new variable to preserve the exists status and pass that to the exists check function. --- diff --git a/sources/c/program/kevux/tools/remove/main/preprocess.c b/sources/c/program/kevux/tools/remove/main/preprocess.c index bd87d07..154357d 100644 --- a/sources/c/program/kevux/tools/remove/main/preprocess.c +++ b/sources/c/program/kevux/tools/remove/main/preprocess.c @@ -26,90 +26,90 @@ extern "C" { kt_remove_operate_memory_check(main, path, &flag_out); if (F_status_is_error(main->setting.state.status) || (flag_out & kt_remove_flag_file_operate_processed_d)) return flag_out; - main->setting.state.status = f_file_exists(path, main->setting.flag & kt_remove_main_flag_follow_d); + f_number_unsigned_t i = 0; - if (main->setting.state.status == F_true) { - const f_status_t status = f_file_is(path, F_file_type_link_d, F_false); + struct stat statistics; - if (F_status_is_error(status)) { - kt_remove_print_simulate_operate_file(&main->program.output, simulate, path, flag_operate); + memset(&statistics, 0, sizeof(struct stat)); - main->setting.state.status = status; + { + const f_status_t exists = main->setting.state.status = f_file_exists(path, main->setting.flag & kt_remove_main_flag_follow_d); - remove_print_warning_file_reason(&main->program.warning, path, kt_remove_print_reason_stat_fail_s); + if (exists == F_true) { + main->setting.state.status = f_file_is(path, F_file_type_link_d, F_false); - return 0; - } - - if (status == F_true) { - flag_out |= kt_remove_flag_file_operate_link_d; - } - } - else if (main->setting.state.status == F_false || F_status_is_error(main->setting.state.status)) { - kt_remove_print_simulate_operate_file(&main->program.output, simulate, path, flag_operate); + if (F_status_is_error(main->setting.state.status)) { + kt_remove_print_simulate_operate_file(&main->program.output, simulate, path, flag_operate); - kt_remove_print_simulate_operate_file_exists(&main->program.output, simulate, path, flag_out); + remove_print_warning_file_reason(&main->program.warning, path, kt_remove_print_reason_stat_fail_s); - if (main->setting.state.status == F_false) { - kt_remove_print_simulate_operate_boolean(&main->program.output, simulate, kt_remove_ignore_s, main->setting.flag & kt_remove_main_flag_force_d); + return 0; + } - return kt_remove_flag_file_operate_missing_d; + if (main->setting.state.status == F_true) { + flag_out |= kt_remove_flag_file_operate_link_d; + } } + else if (exists == F_false || F_status_is_error(exists)) { + kt_remove_print_simulate_operate_file(&main->program.output, simulate, path, flag_operate); - remove_print_warning_file_reason(&main->program.warning, path, kt_remove_print_reason_no_access_s); + kt_remove_print_simulate_operate_file_exists(&main->program.output, simulate, path, flag_out, exists); - return 0; - } + if (exists == F_false) { + kt_remove_print_simulate_operate_boolean(&main->program.output, simulate, kt_remove_ignore_s, main->setting.flag & kt_remove_main_flag_force_d); - if (macro_kt_remove_signal_check(&main->program, &main->setting.state)) return 0; + return kt_remove_flag_file_operate_missing_d; + } - if (main->setting.flag & kt_remove_main_flag_follow_d) { - flag_out |= kt_remove_flag_file_operate_follow_d; - } + remove_print_warning_file_reason(&main->program.warning, path, kt_remove_print_reason_no_access_s); - f_number_unsigned_t i = 0; + return 0; + } - struct stat statistics; + if (macro_kt_remove_signal_check(&main->program, &main->setting.state)) return 0; - memset(&statistics, 0, sizeof(struct stat)); + if (main->setting.flag & kt_remove_main_flag_follow_d) { + flag_out |= kt_remove_flag_file_operate_follow_d; + } - if (recurse == 0x2) { - memcpy(&statistics, &main->cache.statistics, sizeof(struct stat)); - } - else { - main->setting.state.status = f_file_stat(path, main->setting.flag & kt_remove_main_flag_follow_d, &statistics); + if (recurse == 0x2) { + memcpy(&statistics, &main->cache.statistics, sizeof(struct stat)); + } + else { + main->setting.state.status = f_file_stat(path, main->setting.flag & kt_remove_main_flag_follow_d, &statistics); - if (F_status_is_error(main->setting.state.status)) { - kt_remove_print_simulate_operate_file(&main->program.output, simulate, path, flag_operate); + if (F_status_is_error(main->setting.state.status)) { + kt_remove_print_simulate_operate_file(&main->program.output, simulate, path, flag_operate); - kt_remove_print_simulate_operate_file_exists(&main->program.output, simulate, path, flag_out); + kt_remove_print_simulate_operate_file_exists(&main->program.output, simulate, path, flag_out, F_false); - remove_print_warning_file_reason(&main->program.warning, path, kt_remove_print_reason_stat_fail_s); + remove_print_warning_file_reason(&main->program.warning, path, kt_remove_print_reason_stat_fail_s); - return flag_out; + return flag_out; + } } - } - if (macro_f_file_type_is_directory(statistics.st_mode)) { - flag_out |= kt_remove_flag_file_operate_directory_d; + if (macro_f_file_type_is_directory(statistics.st_mode)) { + flag_out |= kt_remove_flag_file_operate_directory_d; - if (!recurse) { - memcpy(&main->cache.statistics, &statistics, sizeof(struct stat)); + if (!recurse) { + memcpy(&main->cache.statistics, &statistics, sizeof(struct stat)); + } } - } - // Directories get pre-processed before recursion to prevent unnecessary recursion but the pre-process again happens after recursion to perform actual operations because the child paths must be all be removed before the directory. - simulate = (main->setting.flag & kt_remove_main_flag_simulate_d) - ? (flag_out & kt_remove_flag_file_operate_directory_d) - ? recurse - ? kt_remove_flag_simulate_directory_recurse_d - : kt_remove_flag_simulate_directory_d - : kt_remove_flag_simulate_directory_not_d - : kt_remove_flag_simulate_none_d; + // Directories get pre-processed before recursion to prevent unnecessary recursion but the pre-process again happens after recursion to perform actual operations because the child paths must be all be removed before the directory. + simulate = (main->setting.flag & kt_remove_main_flag_simulate_d) + ? (flag_out & kt_remove_flag_file_operate_directory_d) + ? recurse + ? kt_remove_flag_simulate_directory_recurse_d + : kt_remove_flag_simulate_directory_d + : kt_remove_flag_simulate_directory_not_d + : kt_remove_flag_simulate_none_d; - kt_remove_print_simulate_operate_file(&main->program.output, simulate, path, flag_operate); + kt_remove_print_simulate_operate_file(&main->program.output, simulate, path, flag_operate); - kt_remove_print_simulate_operate_file_exists(&main->program.output, simulate, path, flag_out); + kt_remove_print_simulate_operate_file_exists(&main->program.output, simulate, path, flag_out, exists); + } kt_remove_preprocess_file_type(main, kt_remove_flag_simulate_is_a_d | simulate, path, macro_f_file_type_is_block(statistics.st_mode), f_file_type_name_block_s, kt_remove_main_flag_block_d, kt_remove_main_flag_block_ignore_d, &flag_out); diff --git a/sources/c/program/kevux/tools/remove/main/print/simulate.c b/sources/c/program/kevux/tools/remove/main/print/simulate.c index df996fa..88889b9 100644 --- a/sources/c/program/kevux/tools/remove/main/print/simulate.c +++ b/sources/c/program/kevux/tools/remove/main/print/simulate.c @@ -90,7 +90,7 @@ extern "C" { #endif // _di_kt_remove_print_simulate_operate_file_ #ifndef _di_kt_remove_print_simulate_operate_file_exists_ - f_status_t kt_remove_print_simulate_operate_file_exists(fl_print_t * const print, const uint8_t simulate, const f_string_static_t path, const uint32_t flag) { + f_status_t kt_remove_print_simulate_operate_file_exists(fl_print_t * const print, const uint8_t simulate, const f_string_static_t path, const uint32_t flag, const f_status_t exists) { if (!print || !print->custom) return F_status_set_error(F_output_not); if (!simulate || (simulate & kt_remove_flag_simulate_directory_d)) return F_output_not; @@ -99,8 +99,8 @@ extern "C" { if (!(main->setting.flag & kt_remove_main_flag_simulate_d)) return F_output_not; - if (F_status_is_error(main->setting.state.status)) { - fl_print_format(" file_access_failure %ui%r", print->to, F_status_set_fine(main->setting.state.status), f_string_eol_s); + if (F_status_is_error(exists)) { + fl_print_format(" file_access_failure %ui%r", print->to, F_status_set_fine(exists), f_string_eol_s); return F_status_set_error(F_output_not); } @@ -124,7 +124,7 @@ extern "C" { f_file_stream_unlock(print->to); } - fll_print_format(" exists %r%r", print->to, main->setting.state.status == F_true ? kt_remove_yes_s : kt_remove_no_s, f_string_eol_s); + fll_print_format(" exists %r%r", print->to, exists == F_true ? kt_remove_yes_s : kt_remove_no_s, f_string_eol_s); return F_okay; } diff --git a/sources/c/program/kevux/tools/remove/main/print/simulate.h b/sources/c/program/kevux/tools/remove/main/print/simulate.h index 5178fd4..9ec1fcf 100644 --- a/sources/c/program/kevux/tools/remove/main/print/simulate.h +++ b/sources/c/program/kevux/tools/remove/main/print/simulate.h @@ -163,6 +163,9 @@ extern "C" { * @param flag * The file operate flags associated with the file. * The kt_remove_flag_file_operate_link_d is of specific interest here. + * @param exists + * The status from the f_file_exists(). + * Where F_true means file exists, F_false means file does not exist, and error bit set designates an error. * * @return * F_okay on success. @@ -171,7 +174,7 @@ extern "C" { * F_output_not (with error bit) if setting is NULL. */ #ifndef _di_kt_remove_print_simulate_operate_file_exists_ - extern f_status_t kt_remove_print_simulate_operate_file_exists(fl_print_t * const print, const uint8_t simulate, const f_string_static_t path, const uint32_t flag); + extern f_status_t kt_remove_print_simulate_operate_file_exists(fl_print_t * const print, const uint8_t simulate, const f_string_static_t path, const uint32_t flag, const f_status_t exists); #endif // _di_kt_remove_print_simulate_operate_file_exists_ /**