]> Kevux Git Server - kevux-tools/commitdiff
Progress: Continue working on completing the remove program. development
authorKevin Day <Kevin@kevux.org>
Fri, 11 Apr 2025 03:55:39 +0000 (22:55 -0500)
committerKevin Day <Kevin@kevux.org>
Fri, 11 Apr 2025 03:55:39 +0000 (22:55 -0500)
Add file type ignore flags to conditionally suppress printing types when not wanted during simulation.
This is needed for the `rm` program when simulate is wrong.
Prior to this change the `rm` program is showing all file types.

sources/c/program/kevux/tools/remove/main/common/define.h
sources/c/program/kevux/tools/remove/main/operate.c
sources/c/program/kevux/tools/remove/main/preprocess.c
sources/c/program/kevux/tools/remove/main/preprocess.h
sources/c/program/kevux/tools/remove/rm/rm.c

index 26efe6214d401f859e499806132406ad4ede2e3c..e69a2c2e0373ef8fc7d00196caa72efceab75f19 100644 (file)
@@ -216,24 +216,31 @@ extern "C" {
  *   - accessed:                    Remove by last accessed datetime.
  *   - accessed_changed_updated:    A helper flag representing accessed, changed, and updated flag bits being set.
  *   - block:                       Remove by file type: block.
+ *   - block_ignore:                Ignore during simulate file type: block.
  *   - changed:                     Remove by changed datetime.
  *   - character:                   Remove by file type: character.
+ *   - character_ignore:            Ignore during simulate file type: character.
  *   - copyright:                   Print copyright.
  *   - different:                   Remove by user different from caller.
  *   - directory:                   Remove by file type: directory.
+ *   - directory_ignore:            Ignore during simulate file type: directory.
  *   - empty_all:                   Helper flag representing all empty flag bits.
  *   - empty_only:                  Remove empty directories.
  *   - empty_only_fail:             Fail on empty directories.
  *   - empty_not:                   Remove not empty directories.
  *   - empty_not_fail:              Fail on not empty directories.
  *   - fifo:                        Remove by file type: FIFO.
- *   - file_types_except_directory: A helper flag representing all file types except for the directory type.
+ *   - fifo_ignore:                 Ignore during simulate file type: FIFO.
+ *   - file_types:                  A helper flag representing all file types flags.
+ *   - file_types_except_directory: A helper flag representing all file types flags except for the directory type.
+ *   - file_types_ignore:           A helper flag representing all file types "ignore" flags.
  *   - follow:                      Follow symbolic links for deleting the file being pointed to rather than the link itself (when not set the link itself is deleted).
  *   - force:                       Forcibly delete.
  *   - force_simulate:              A helper flag representing force and simulate flag bits being set.
  *   - group:                       Remove by GID.
  *   - help:                        Print help.
  *   - link:                        Remove by file type: link.
+ *   - link_ignore:                 Ignore during simulate file type: link.
  *   - mode:                        Remove by mode.
  *   - option_type:                 Designates that type match options are specifically in use, overriding the default behavior (one should also set options_used when setting this).
  *   - option_type_used:            A helper flag representing option_type and option_used flag bits being set.
@@ -245,15 +252,18 @@ extern "C" {
  *   - prompt_once:                 Operate in interactive mode: prompting once if removing 3 or more files or when operating recursively.
  *   - recurse:                     Recurse directories.
  *   - regular:                     Remove by file type: regular.
+ *   - regular_ignore:              Ignore during simulate file type: regular.
  *   - remember:                    Enable remembering paths already processed.
  *   - root:                        Allow for deleting root directory (Dangerous!).
  *   - same:                        Remove by same user as caller.
  *   - simulate:                    Do not actually perform deletes, instead print messages (when silent, should still return 0 or 1).
  *   - socket:                      Remove by file type: socket.
+ *   - socket_ignore:               Ignore during simulate file type: socket.
  *   - tree:                        Remove directory tree (parent directories) (remove a/b/c, removes a/b/c, then a/b/, then a).
  *   - updated:                     Remove by last updated datetime.
  *   - user:                        Remove by UID.
  *   - unknown:                     Remove by file type: unknown.
+ *   - unknown_ignore:              Ignore during simulate file type: unknown.
  *   - utc:                         Process dates in UTC mode.
  *   - version:                     Print version.
  *   - version_copyright_help:      A helper flag representing version, copyright, and help flag bits being set.
@@ -261,49 +271,59 @@ extern "C" {
 #ifndef _di_kt_remove_main_flag_d_
   #define kt_remove_main_flag_none_d                        0x0
   #define kt_remove_main_flag_accessed_d                    0x1
-  #define kt_remove_main_flag_accessed_changed_updated_d    0x100000005
+  #define kt_remove_main_flag_accessed_changed_updated_d    0x8000000009
   #define kt_remove_main_flag_block_d                       0x2
-  #define kt_remove_main_flag_changed_d                     0x4
-  #define kt_remove_main_flag_character_d                   0x8
-  #define kt_remove_main_flag_copyright_d                   0x10
-  #define kt_remove_main_flag_different_d                   0x20
-  #define kt_remove_main_flag_directory_d                   0x40
-  #define kt_remove_main_flag_empty_all_d                   0x780
-  #define kt_remove_main_flag_empty_only_d                  0x80
-  #define kt_remove_main_flag_empty_only_fail_d             0x100
-  #define kt_remove_main_flag_empty_not_d                   0x200
-  #define kt_remove_main_flag_empty_not_fail_d              0x400
-  #define kt_remove_main_flag_fifo_d                        0x800
-  #define kt_remove_main_flag_file_types_except_directory_d 0x44201080a
-  #define kt_remove_main_flag_follow_d                      0x1000
-  #define kt_remove_main_flag_force_d                       0x2000
-  #define kt_remove_main_flag_force_simulate_d              0x20002000
-  #define kt_remove_main_flag_group_d                       0x4000
-  #define kt_remove_main_flag_help_d                        0x8000
-  #define kt_remove_main_flag_link_d                        0x10000
-  #define kt_remove_main_flag_mode_d                        0x20000
-  #define kt_remove_main_flag_option_type_d                 0x40000
-  #define kt_remove_main_flag_option_type_used_d            0xc0000
-  #define kt_remove_main_flag_option_used_d                 0x80000
-  #define kt_remove_main_flag_prompt_all_d                  0xf00000
-  #define kt_remove_main_flag_prompt_each_d                 0x100000
-  #define kt_remove_main_flag_prompt_follow_d               0x200000
-  #define kt_remove_main_flag_prompt_never_d                0x400000
-  #define kt_remove_main_flag_prompt_once_d                 0x800000
-  #define kt_remove_main_flag_recurse_d                     0x1000000
-  #define kt_remove_main_flag_regular_d                     0x2000000
-  #define kt_remove_main_flag_remember_d                    0x4000000
-  #define kt_remove_main_flag_root_d                        0x8000000
-  #define kt_remove_main_flag_same_d                        0x10000000
-  #define kt_remove_main_flag_simulate_d                    0x20000000
-  #define kt_remove_main_flag_socket_d                      0x40000000
-  #define kt_remove_main_flag_tree_d                        0x80000000
-  #define kt_remove_main_flag_updated_d                     0x100000000
-  #define kt_remove_main_flag_user_d                        0x200000000
-  #define kt_remove_main_flag_unknown_d                     0x400000000
-  #define kt_remove_main_flag_utc_d                         0x800000000
-  #define kt_remove_main_flag_version_d                     0x1000000000
-  #define kt_remove_main_flag_version_copyright_help_d      0x1000008010
+  #define kt_remove_main_flag_block_ignore_d                0x4
+  #define kt_remove_main_flag_changed_d                     0x8
+  #define kt_remove_main_flag_character_d                   0x10
+  #define kt_remove_main_flag_character_ignore_d            0x20
+  #define kt_remove_main_flag_copyright_d                   0x40
+  #define kt_remove_main_flag_different_d                   0x80
+  #define kt_remove_main_flag_directory_d                   0x100
+  #define kt_remove_main_flag_directory_ignore_d            0x200
+  #define kt_remove_main_flag_empty_all_d                   0x3c00
+  #define kt_remove_main_flag_empty_only_d                  0x400
+  #define kt_remove_main_flag_empty_only_fail_d             0x800
+  #define kt_remove_main_flag_empty_not_d                   0x1000
+  #define kt_remove_main_flag_empty_not_fail_d              0x2000
+  #define kt_remove_main_flag_fifo_d                        0x4000
+  #define kt_remove_main_flag_fifo_ignore_d                 0x8000
+  #define kt_remove_main_flag_file_types_d                  0x21040104112
+  #define kt_remove_main_flag_file_types_except_directory_d 0x21040104012
+  #define kt_remove_main_flag_file_types_ignore_d           0x42080208224
+  #define kt_remove_main_flag_follow_d                      0x10000
+  #define kt_remove_main_flag_force_d                       0x20000
+  #define kt_remove_main_flag_force_simulate_d              0x800020000
+  #define kt_remove_main_flag_group_d                       0x40000
+  #define kt_remove_main_flag_help_d                        0x80000
+  #define kt_remove_main_flag_link_d                        0x100000
+  #define kt_remove_main_flag_link_ignore_d                 0x200000
+  #define kt_remove_main_flag_mode_d                        0x400000
+  #define kt_remove_main_flag_option_type_d                 0x800000
+  #define kt_remove_main_flag_option_type_used_d            0x1800000
+  #define kt_remove_main_flag_option_used_d                 0x1000000
+  #define kt_remove_main_flag_prompt_all_d                  0x1e000000
+  #define kt_remove_main_flag_prompt_each_d                 0x2000000
+  #define kt_remove_main_flag_prompt_follow_d               0x4000000
+  #define kt_remove_main_flag_prompt_never_d                0x8000000
+  #define kt_remove_main_flag_prompt_once_d                 0x10000000
+  #define kt_remove_main_flag_recurse_d                     0x20000000
+  #define kt_remove_main_flag_regular_d                     0x40000000
+  #define kt_remove_main_flag_regular_ignore_d              0x80000000
+  #define kt_remove_main_flag_remember_d                    0x100000000
+  #define kt_remove_main_flag_root_d                        0x200000000
+  #define kt_remove_main_flag_same_d                        0x400000000
+  #define kt_remove_main_flag_simulate_d                    0x800000000
+  #define kt_remove_main_flag_socket_d                      0x1000000000
+  #define kt_remove_main_flag_socket_ignore_d               0x2000000000
+  #define kt_remove_main_flag_tree_d                        0x4000000000
+  #define kt_remove_main_flag_updated_d                     0x8000000000
+  #define kt_remove_main_flag_user_d                        0x10000000000
+  #define kt_remove_main_flag_unknown_d                     0x20000000000
+  #define kt_remove_main_flag_unknown_ignore_d              0x40000000000
+  #define kt_remove_main_flag_utc_d                         0x80000000000
+  #define kt_remove_main_flag_version_d                     0x100000000000
+  #define kt_remove_main_flag_version_copyright_help_d      0x100000080040
 #endif // _di_kt_remove_main_flag_e_
 
 /**
index 658e3215c54e49ff061428f5ad37822d8efe4211..337765d1757dabbfc5a390617c4f6bedd75c6e8c 100644 (file)
@@ -56,8 +56,6 @@ extern "C" {
     if (F_status_is_error(main->setting.state.status)) return main->setting.state.status;
     if (flag_operate & kt_remove_flag_file_operate_processed_d) return F_no;
 
-    f_status_t status_remove = F_no;
-
     if (flag_operate & kt_remove_flag_file_operate_missing_d) {
       if (!(main->setting.flag & kt_remove_main_flag_force_simulate_d)) {
         main->setting.state.status = F_status_set_error(F_file_found_not);
index 42656425ceed3385047e561ea5c37dbd96fd2cf1..492f17b2ac6099cab5f61d81ca8fb1b09f988792 100644 (file)
@@ -84,25 +84,25 @@ extern "C" {
       return flag_out;
     }
 
-    kt_remove_preprocess_file_type(main, path, macro_f_file_type_is_block(statistics.st_mode), f_file_type_name_block_s, kt_remove_main_flag_block_d, 0x1, &flag_out);
+    kt_remove_preprocess_file_type(main, 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, 0x1, &flag_out);
 
-    kt_remove_preprocess_file_type(main, path, macro_f_file_type_is_character(statistics.st_mode), f_file_type_name_character_s, kt_remove_main_flag_character_d, 0x1, &flag_out);
+    kt_remove_preprocess_file_type(main, path, macro_f_file_type_is_character(statistics.st_mode), f_file_type_name_character_s, kt_remove_main_flag_character_d, kt_remove_main_flag_character_ignore_d, 0x1, &flag_out);
 
-    kt_remove_preprocess_file_type(main, path, macro_f_file_type_is_directory(statistics.st_mode), f_file_type_name_directory_s, kt_remove_main_flag_directory_d, 0x1, &flag_out);
+    kt_remove_preprocess_file_type(main, path, macro_f_file_type_is_directory(statistics.st_mode), f_file_type_name_directory_s, kt_remove_main_flag_directory_d, kt_remove_main_flag_directory_ignore_d, 0x1, &flag_out);
 
     if (macro_f_file_type_is_directory(statistics.st_mode)) {
       flag_out |= kt_remove_flag_file_operate_directory_d;
     }
 
-    kt_remove_preprocess_file_type(main, path, macro_f_file_type_is_fifo(statistics.st_mode), f_file_type_name_fifo_s, kt_remove_main_flag_fifo_d, 0x1, &flag_out);
+    kt_remove_preprocess_file_type(main, path, macro_f_file_type_is_fifo(statistics.st_mode), f_file_type_name_fifo_s, kt_remove_main_flag_fifo_d, kt_remove_main_flag_fifo_ignore_d, 0x1, &flag_out);
 
-    kt_remove_preprocess_file_type(main, path, macro_f_file_type_is_link(statistics.st_mode), f_file_type_name_link_s, kt_remove_main_flag_link_d, 0x1, &flag_out);
+    kt_remove_preprocess_file_type(main, path, macro_f_file_type_is_link(statistics.st_mode), f_file_type_name_link_s, kt_remove_main_flag_link_d, kt_remove_main_flag_link_ignore_d, 0x1, &flag_out);
 
-    kt_remove_preprocess_file_type(main, path, macro_f_file_type_is_regular(statistics.st_mode), f_file_type_name_regular_s, kt_remove_main_flag_regular_d, 0x3, &flag_out);
+    kt_remove_preprocess_file_type(main, path, macro_f_file_type_is_regular(statistics.st_mode), f_file_type_name_regular_s, kt_remove_main_flag_regular_d, kt_remove_main_flag_regular_ignore_d, 0x3, &flag_out);
 
-    kt_remove_preprocess_file_type(main, path, macro_f_file_type_is_socket(statistics.st_mode), f_file_type_name_socket_s, kt_remove_main_flag_socket_d, 0x1, &flag_out);
+    kt_remove_preprocess_file_type(main, path, macro_f_file_type_is_socket(statistics.st_mode), f_file_type_name_socket_s, kt_remove_main_flag_socket_d, kt_remove_main_flag_socket_ignore_d, 0x1, &flag_out);
 
-    kt_remove_preprocess_file_type(main, path, macro_f_file_type_is_unknown(statistics.st_mode), f_file_type_name_unknown_s, kt_remove_main_flag_unknown_d, 0x0, &flag_out);
+    kt_remove_preprocess_file_type(main, path, macro_f_file_type_is_unknown(statistics.st_mode), f_file_type_name_unknown_s, kt_remove_main_flag_unknown_d, kt_remove_main_flag_unknown_ignore_d, 0x0, &flag_out);
 
     if (!(main->setting.flag & kt_remove_main_flag_simulate_d) && (flag_out & kt_remove_flag_file_operate_remove_fail_d)) return flag_out;
 
@@ -586,7 +586,7 @@ extern "C" {
 #endif // _di_kt_remove_preprocess_file_dates_
 
 #ifndef _di_kt_remove_preprocess_file_type_
-  void kt_remove_preprocess_file_type(kt_remove_main_t * const main, const f_string_static_t path, const bool is, f_string_static_t name, const uint64_t type, const uint8_t code, uint32_t * const flag_out) {
+  void kt_remove_preprocess_file_type(kt_remove_main_t * const main, const f_string_static_t path, const bool is, f_string_static_t name, const uint64_t type, const uint64_t ignore, const uint8_t code, uint32_t * const flag_out) {
 
     if (!main || !flag_out) return;
 
@@ -601,7 +601,7 @@ extern "C" {
       }
     }
 
-    if (is || (main->setting.flag & type)) {
+    if (is || (main->setting.flag & type) && !(main->setting.flag & ignore)) {
       kt_remove_print_simulate_operate_boolean(&main->program.output, name, is);
     }
   }
index 3720c6b2ebe97cc6a485fdeb2c053d48ca209a68..cdf4161b0a6c3714842dc9a1f8e8c280ed3f2025 100644 (file)
@@ -91,6 +91,8 @@ extern "C" {
  *   The name of the file type being tested.
  * @param type
  *   A flag from the kt_remove_main_flag_*_d representing the file type.
+ * @param ignore
+ *   A flag from the kt_remove_main_flag_*_ignore_d representing the file type ignore flag.
  * @param code
  *   A code intended to be passed to kt_remove_print_error_file_is_a() as needed.
  * @param flag_out
@@ -99,7 +101,7 @@ extern "C" {
  *   Must not be NULL.
  */
 #ifndef _di_kt_remove_preprocess_file_type_
-  extern void kt_remove_preprocess_file_type(kt_remove_main_t * const main, const f_string_static_t path, const bool is, f_string_static_t name, const uint64_t type, const uint8_t code, uint32_t * const flag_out);
+  extern void kt_remove_preprocess_file_type(kt_remove_main_t * const main, const f_string_static_t path, const bool is, f_string_static_t name, const uint64_t type, const uint64_t ignore, const uint8_t code, uint32_t * const flag_out);
 #endif // _di_kt_remove_preprocess_file_type_
 
 #ifdef __cplusplus
index 3d626308ba797ee57cf70765df4264c24b35c32c..f1f890957106160450cc2e742f5a4571f5849c84 100644 (file)
@@ -176,7 +176,7 @@ extern "C" {
     }
 
     // Make sure all non-directory files are deleted.
-    main->setting.flag |= kt_remove_main_flag_file_types_except_directory_d | kt_remove_main_flag_option_type_d| kt_remove_main_flag_option_used_d;
+    main->setting.flag |= kt_remove_main_flag_file_types_except_directory_d | kt_remove_main_flag_option_type_d | kt_remove_main_flag_option_used_d | kt_remove_main_flag_file_types_ignore_d;
   }
 #endif // _di_kt_remove_rm_setting_load_