]> Kevux Git Server - kevux-tools/commitdiff
Bugfix: Properly report exists check.
authorKevin Day <Kevin@kevux.org>
Sat, 19 Apr 2025 03:06:32 +0000 (22:06 -0500)
committerKevin Day <Kevin@kevux.org>
Sat, 19 Apr 2025 03:06:32 +0000 (22:06 -0500)
The status is being changed.
Use a new variable to preserve the exists status and pass that to the exists check function.

sources/c/program/kevux/tools/remove/main/preprocess.c
sources/c/program/kevux/tools/remove/main/print/simulate.c
sources/c/program/kevux/tools/remove/main/print/simulate.h

index bd87d077a4efe7d2f3a90e7639da3e3cb1806218..154357d40195d24228a8457308db0cd0f6b39f7f 100644 (file)
@@ -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);
 
index df996fa106000d3d43e78ef548ac7d308ea8d45e..88889b90c1dea0cac4ff666ffaadd37610b1cb41 100644 (file)
@@ -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;
   }
index 5178fd4ee3c5078c548b50d9c272e5b6c3e3d932..9ec1fcf92b1f6380136c482e779b271aef9d4d61 100644 (file)
@@ -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_
 
 /**