From 59b9db759df36746814b515171bb9e37ce379e4a Mon Sep 17 00:00:00 2001 From: Kevin Day Date: Mon, 31 Mar 2025 19:53:28 -0500 Subject: [PATCH] Progress: Continue working on completing the remove program. Fix recursion parameter to actually work by setting the `kt_remove_depth_max_d` when calling `f_directory_remove()`. Make sure `--force` works as expected as well as work when not specified (remove unnecessary checks). Still print verbose messages even when in debug mode while the force parameter is passed. Oops! I incorrectly used `macro_f_console_parameter_t_initialize_6()` when I instead should have used `macro_f_console_parameter_t_initialize_4()`. The `macro_f_console_parameter_t_initialize_4()` is for the short parameter type where the `macro_f_console_parameter_t_initialize_6()` is for the simple parameter type. Finish the `--help` messages for the `rm` program. Make sure to note that the `--one-file-system` is not supported. Fix messaage for `--preserve-root=all` error. Make sure to handle `--preserve-root=/`. --- .../c/program/kevux/tools/remove/main/operate.c | 12 ++++---- .../c/program/kevux/tools/remove/main/operate.h | 4 +-- .../c/program/kevux/tools/remove/main/preprocess.c | 11 ++------ .../program/kevux/tools/remove/main/print/debug.c | 2 +- .../kevux/tools/remove/main/print/message.c | 2 +- .../kevux/tools/remove/main/print/verbose.c | 2 +- .../kevux/tools/remove/main/print/warning.c | 2 +- .../c/program/kevux/tools/remove/rm/enumeration.h | 8 +++--- sources/c/program/kevux/tools/remove/rm/print.c | 9 ++++-- sources/c/program/kevux/tools/remove/rm/rm.c | 16 ++++++++--- sources/c/program/kevux/tools/remove/rm/string.c | 4 +++ sources/c/program/kevux/tools/remove/rm/string.h | 32 +++++++++++++++------- 12 files changed, 63 insertions(+), 41 deletions(-) diff --git a/sources/c/program/kevux/tools/remove/main/operate.c b/sources/c/program/kevux/tools/remove/main/operate.c index 5be8e65..c8bc445 100644 --- a/sources/c/program/kevux/tools/remove/main/operate.c +++ b/sources/c/program/kevux/tools/remove/main/operate.c @@ -323,7 +323,7 @@ extern "C" { } #endif // _di_kt_remove_operate_file_recurse_handle_ -#ifndef _di_kt_remove_operate_file_remove_normal_ +#ifndef _di_kt_remove_operate_file_remove_ f_status_t kt_remove_operate_file_remove(kt_remove_main_t * const main, const f_string_static_t path, const uint32_t flag_operate) { if (!main) return F_status_set_error(F_parameter); @@ -346,7 +346,7 @@ extern "C" { } status = flag_operate & kt_remove_flag_file_operate_directory_d - ? f_directory_remove((flag_operate & kt_remove_flag_file_operate_follow_d) ? main->cache.buffer : path, 0, F_false) + ? f_directory_remove((flag_operate & kt_remove_flag_file_operate_follow_d) ? main->cache.buffer : path, (flag_operate & kt_remove_flag_file_operate_recurse_d) ? kt_remove_depth_max_d : 0, F_false) : f_file_remove((flag_operate & kt_remove_flag_file_operate_follow_d) ? main->cache.buffer : path); if (F_status_is_error(status)) { @@ -371,14 +371,16 @@ extern "C" { } } else { - kt_remove_print_verbose_operate_file_remove(&main->program.output, path, flag_operate); - status = F_yes; } + if (status == F_yes) { + kt_remove_print_verbose_operate_file_remove(&main->program.output, path, flag_operate); + } + return status; } -#endif // _di_kt_remove_operate_file_remove_normal_ +#endif // _di_kt_remove_operate_file_remove_ #ifndef _di_kt_remove_operate_memory_check_ void kt_remove_operate_memory_check(kt_remove_main_t * const main, const f_string_static_t path, uint32_t * const flag_operate) { diff --git a/sources/c/program/kevux/tools/remove/main/operate.h b/sources/c/program/kevux/tools/remove/main/operate.h index f75fb82..49ae41a 100644 --- a/sources/c/program/kevux/tools/remove/main/operate.h +++ b/sources/c/program/kevux/tools/remove/main/operate.h @@ -202,9 +202,9 @@ extern "C" { * @see f_file_link_read() * @see f_file_remove() */ -#ifndef _di_kt_remove_operate_file_remove_normal_ +#ifndef _di_kt_remove_operate_file_remove_ extern f_status_t kt_remove_operate_file_remove(kt_remove_main_t * const main, const f_string_static_t path, const uint32_t flag_operate); -#endif // _di_kt_remove_operate_file_remove_normal_ +#endif // _di_kt_remove_operate_file_remove_ /** * Check if a file should be skipped based on the memory. diff --git a/sources/c/program/kevux/tools/remove/main/preprocess.c b/sources/c/program/kevux/tools/remove/main/preprocess.c index 602ca71..8d6151f 100644 --- a/sources/c/program/kevux/tools/remove/main/preprocess.c +++ b/sources/c/program/kevux/tools/remove/main/preprocess.c @@ -47,15 +47,8 @@ extern "C" { kt_remove_print_simulate_operate_file_exists(&main->program.output, path, flag_out); if (main->setting.state.status == F_false) { - if (main->setting.flag & kt_remove_main_flag_force_d) { - if (main->setting.flag & kt_remove_main_flag_simulate_d) { - kt_remove_print_simulate_operate_boolean(&main->program.output, kt_remove_ignore_s, F_true); - } - } - else { - if (main->setting.flag & kt_remove_main_flag_simulate_d) { - kt_remove_print_simulate_operate_boolean(&main->program.output, kt_remove_ignore_s, F_false); - } + if (main->setting.flag & kt_remove_main_flag_simulate_d) { + kt_remove_print_simulate_operate_boolean(&main->program.output, kt_remove_ignore_s, main->setting.flag & kt_remove_main_flag_force_d); } return kt_remove_flag_file_operate_missing_d; diff --git a/sources/c/program/kevux/tools/remove/main/print/debug.c b/sources/c/program/kevux/tools/remove/main/print/debug.c index a609d7d..e1958e8 100644 --- a/sources/c/program/kevux/tools/remove/main/print/debug.c +++ b/sources/c/program/kevux/tools/remove/main/print/debug.c @@ -12,7 +12,7 @@ extern "C" { kt_remove_main_t * const main = (kt_remove_main_t *) print->custom; if (main->setting.flag & kt_remove_main_flag_simulate_d) return F_output_not; - if (print->verbosity < f_console_verbosity_debug_e && !(main->setting.flag & kt_remove_main_flag_force_d)) return F_output_not; + if (print->verbosity < f_console_verbosity_debug_e) return F_output_not; fll_print_format("Removing '%Q'.%r", print->to, path, f_string_eol_s); diff --git a/sources/c/program/kevux/tools/remove/main/print/message.c b/sources/c/program/kevux/tools/remove/main/print/message.c index 2023e09..7e9b89d 100644 --- a/sources/c/program/kevux/tools/remove/main/print/message.c +++ b/sources/c/program/kevux/tools/remove/main/print/message.c @@ -114,7 +114,7 @@ extern "C" { fl_print_format("'%[%r%r%]', and ", print->to, context.set.notable, f_console_symbol_long_normal_s, kt_remove_long_changed_s, context.set.notable); fl_print_format("'%[%r%r%]'.%r%r", print->to, context.set.notable, f_console_symbol_long_normal_s, kt_remove_long_updated_s, context.set.notable, f_string_eol_s, f_string_eol_s); - fl_print_format(" Where '%[updated%]' refers to when the contents of a file have been changed and '%[changed%]' refers to when the filesystem data for that file have been changed.%r%r", print->to, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s, f_string_eol_s); + fl_print_format(" Where '%[updated%]' refers to when the contents of a file have been changed and '%[changed%]' refers to when the file system data for that file have been changed.%r%r", print->to, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s, f_string_eol_s); fl_print_format(" The first value to the date related parameters must be any of the following comparison operators:%r", print->to, f_string_eol_s); fl_print_format(" - '%[%r%]'", print->to, context.set.notable, kt_remove_date_symbol_equal_s, context.set.notable); diff --git a/sources/c/program/kevux/tools/remove/main/print/verbose.c b/sources/c/program/kevux/tools/remove/main/print/verbose.c index 5eb6029..114a7d0 100644 --- a/sources/c/program/kevux/tools/remove/main/print/verbose.c +++ b/sources/c/program/kevux/tools/remove/main/print/verbose.c @@ -12,7 +12,7 @@ extern "C" { kt_remove_main_t * const main = (kt_remove_main_t *) print->custom; if (main->setting.flag & kt_remove_main_flag_simulate_d) return F_output_not; - if (print->verbosity < f_console_verbosity_verbose_e && !(main->setting.flag & kt_remove_main_flag_force_d)) return F_output_not; + if (print->verbosity < f_console_verbosity_verbose_e) return F_output_not; fll_print_format("Removed '%Q'.%r", print->to, path, f_string_eol_s); diff --git a/sources/c/program/kevux/tools/remove/main/print/warning.c b/sources/c/program/kevux/tools/remove/main/print/warning.c index b12d226..248616a 100644 --- a/sources/c/program/kevux/tools/remove/main/print/warning.c +++ b/sources/c/program/kevux/tools/remove/main/print/warning.c @@ -11,7 +11,7 @@ extern "C" { kt_remove_main_t * const main = (kt_remove_main_t *) print->custom; - if (print->verbosity < f_console_verbosity_verbose_e && !(main->setting.flag & kt_remove_main_flag_force_d)) return F_output_not; + if (print->verbosity < f_console_verbosity_verbose_e || (main->setting.flag & kt_remove_main_flag_force_d) && print->verbosity < f_console_verbosity_debug_e) return F_output_not; f_file_stream_lock(print->to); diff --git a/sources/c/program/kevux/tools/remove/rm/enumeration.h b/sources/c/program/kevux/tools/remove/rm/enumeration.h index e9f7c12..eb8a669 100644 --- a/sources/c/program/kevux/tools/remove/rm/enumeration.h +++ b/sources/c/program/kevux/tools/remove/rm/enumeration.h @@ -40,16 +40,16 @@ extern "C" { macro_fll_program_console_parameter_standard_initialize, \ \ macro_f_console_parameter_t_initialize_3(kt_remove_short_directory_s, kt_remove_rm_long_directory_s, 0, f_console_flag_normal_e), \ - macro_f_console_parameter_t_initialize_6( kt_remove_rm_short_each_s, 0, f_console_flag_normal_e), \ + macro_f_console_parameter_t_initialize_4( kt_remove_rm_short_each_s, 0, f_console_flag_normal_e), \ macro_f_console_parameter_t_initialize_3(kt_remove_short_force_s, kt_remove_long_force_s, 0, f_console_flag_normal_e), \ - macro_f_console_parameter_t_initialize_6( kt_remove_rm_short_once_s, 0, f_console_flag_normal_e), \ + macro_f_console_parameter_t_initialize_4( kt_remove_rm_short_once_s, 0, f_console_flag_normal_e), \ macro_f_console_parameter_t_initialize_5( kt_remove_rm_long_one_filesystem_s, 0, f_console_flag_normal_e), \ macro_f_console_parameter_t_initialize_3(kt_remove_short_recurse_s, kt_remove_long_recurse_s, 0, f_console_flag_normal_e), \ - macro_f_console_parameter_t_initialize_6( kt_remove_rm_short_recursive_s, 0, f_console_flag_normal_e), \ + macro_f_console_parameter_t_initialize_4( kt_remove_rm_short_recursive_s, 0, f_console_flag_normal_e), \ macro_f_console_parameter_t_initialize_3(kt_remove_short_simulate_s, kt_remove_long_simulate_s, 0, f_console_flag_normal_e), \ macro_f_console_parameter_t_initialize_5( kt_remove_rm_long_preserve_root_s, 0, f_console_flag_normal_e), \ macro_f_console_parameter_t_initialize_5( kt_remove_rm_long_preserve_root_not_s, 0, f_console_flag_normal_e), \ - macro_f_console_parameter_t_initialize_3(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_flag_normal_e), \ + macro_f_console_parameter_t_initialize_3(kt_remove_rm_short_verbose_s, kt_remove_rm_long_verbose_s, 0, f_console_flag_normal_e), \ macro_f_console_parameter_t_initialize_5( f_console_standard_long_version_s, 0, f_console_flag_normal_e), \ } diff --git a/sources/c/program/kevux/tools/remove/rm/print.c b/sources/c/program/kevux/tools/remove/rm/print.c index 5e882e7..0612eb8 100644 --- a/sources/c/program/kevux/tools/remove/rm/print.c +++ b/sources/c/program/kevux/tools/remove/rm/print.c @@ -61,18 +61,21 @@ extern "C" { f_print_dynamic_raw(f_string_eol_s, print->to); + fll_program_print_help_option(print, kt_remove_rm_short_directory_s, kt_remove_rm_long_directory_s, f_console_symbol_short_normal_s, f_console_symbol_long_normal_s, " Remove empty directories."); fll_program_print_help_option(print, kt_remove_short_force_s, kt_remove_long_force_s, f_console_symbol_short_normal_s, f_console_symbol_long_normal_s, " Operate in interactive mode, prompting for every file."); fll_program_print_help_option_short(print, kt_remove_rm_short_each_s, f_console_symbol_short_normal_s, " Prompt for every file when removing."); fll_program_print_help_option_short(print, kt_remove_rm_short_once_s, f_console_symbol_short_normal_s, " Operate in interactive mode: prompting if removing 3 or more files."); + fll_program_print_help_option_long(print, kt_remove_rm_long_preserve_root_not_s, f_console_symbol_long_normal_s, "Allow deletion of the root directory '/' (dangerous)."); + fll_program_print_help_option_long(print, kt_remove_rm_long_one_filesystem_s, f_console_symbol_long_normal_s, " Skip any directory (while recursing) not on the file system used to call this program (not supported)."); + fll_program_print_help_option_long(print, kt_remove_rm_long_preserve_root_s, f_console_symbol_long_normal_s, " Prevent deletion of the root directoy '/' (default)."); + fll_program_print_help_option(print, kt_remove_short_recurse_s, f_string_empty_s, f_console_symbol_short_normal_s, f_string_empty_s, 0); fll_program_print_help_option(print, kt_remove_rm_short_recursive_s, kt_remove_rm_long_recursive_s, f_console_symbol_short_normal_s, f_console_symbol_long_normal_s, " Traverse into directories when removing."); fll_program_print_help_option(print, kt_remove_short_simulate_s, kt_remove_long_simulate_s, f_console_symbol_short_normal_s, f_console_symbol_long_normal_s, " Simulate removal rather than actually removing."); + fll_program_print_help_option(print, kt_remove_rm_short_verbose_s, kt_remove_rm_long_verbose_s, f_console_symbol_short_normal_s, f_console_symbol_long_normal_s, " Increase verbosity beyond normal, printing more details."); - fll_program_print_help_option_long(print, kt_remove_rm_long_preserve_root_s, f_console_symbol_long_normal_s, " Prevent deletion of the root directoy '/' (default)."); - fll_program_print_help_option_long(print, kt_remove_rm_long_preserve_root_not_s, f_console_symbol_long_normal_s, "Allow deletion of the root directory '/' (dangerous)."); - fll_program_print_help_option_long(print, f_console_standard_long_verbose_s, f_console_symbol_long_normal_s, " Increase verbosity beyond normal, printing more details."); fll_program_print_help_option_long(print, f_console_standard_long_version_s, f_console_symbol_long_normal_s, " Print only the program version number and immediately exit."); f_print_dynamic_raw(f_string_eol_s, print->to); diff --git a/sources/c/program/kevux/tools/remove/rm/rm.c b/sources/c/program/kevux/tools/remove/rm/rm.c index 03dafbe..085875c 100644 --- a/sources/c/program/kevux/tools/remove/rm/rm.c +++ b/sources/c/program/kevux/tools/remove/rm/rm.c @@ -12,8 +12,8 @@ extern "C" { if (!flag_operate) return F_status_set_error(F_parameter); if (flag_operate & kt_remove_flag_file_operate_directory_d) { - if (main->setting.flag & kt_remove_main_flag_empty_only_d) { - if (!(flag_operate & kt_remove_flag_file_operate_empty_d)) { + if (main->setting.flag & kt_remove_main_flag_directory_d) { + if (!(flag_operate & kt_remove_flag_file_operate_empty_d) && (main->setting.flag & kt_remove_main_flag_empty_only_d)) { kt_remove_rm_print_error_directory_empty_not(&main->program.error, path); return F_status_set_error(F_no); @@ -80,7 +80,10 @@ extern "C" { } if ((main->program.parameters.array[kt_remove_rm_parameter_recursive_e].result & f_console_result_found_e) || (main->program.parameters.array[kt_remove_rm_parameter_recursive_alt_e].result & f_console_result_found_e)) { - main->setting.flag |= kt_remove_main_flag_recurse_d; + main->setting.flag |= kt_remove_main_flag_recurse_d | kt_remove_main_flag_directory_d; + + // Must not have the empty only flag set while recursive. + main->setting.flag &= ~kt_remove_main_flag_empty_only_d; } // @todo the kt_remove_main_flag_root_d needs to be implemented in the base remove project. @@ -155,11 +158,16 @@ extern "C" { if (f_compare_dynamic(kt_remove_rm_static_preserve_root_all_s, main->program.parameters.arguments.array[index]) == F_equal_to) { main->setting.state.status = F_status_set_error(F_support_not); - fll_program_print_error_parameter_support_not(&main->program.error, f_console_symbol_long_normal_s, kt_remove_rm_long_one_filesystem_s); + fll_program_print_error_parameter_support_not(&main->program.error, f_string_empty_s, kt_remove_rm_static_preserve_root_all_s); return; } + // This is the default and "=all" is not supported, so ignore this parameter. + if (f_compare_dynamic(kt_remove_rm_static_preserve_root_slash_s, main->program.parameters.arguments.array[index]) == F_equal_to) { + continue; + } + main->setting.files.array[main->setting.files.used].used = 0; fl_path_clean(main->program.parameters.arguments.array[index], &main->setting.files.array[main->setting.files.used]); diff --git a/sources/c/program/kevux/tools/remove/rm/string.c b/sources/c/program/kevux/tools/remove/rm/string.c index 62061f0..7a890f8 100644 --- a/sources/c/program/kevux/tools/remove/rm/string.c +++ b/sources/c/program/kevux/tools/remove/rm/string.c @@ -10,21 +10,25 @@ extern "C" { #endif // _di_remove_program_name_s_ #ifndef _di_kt_remove_rm_parameter_s_ + const f_string_static_t kt_remove_rm_short_directory_s = macro_f_string_static_t_initialize_1(KT_REMOVE_rm_short_directory_s, 0, KT_REMOVE_rm_short_directory_s_length); const f_string_static_t kt_remove_rm_short_each_s = macro_f_string_static_t_initialize_1(KT_REMOVE_rm_short_each_s, 0, KT_REMOVE_rm_short_each_s_length); const f_string_static_t kt_remove_rm_short_once_s = macro_f_string_static_t_initialize_1(KT_REMOVE_rm_short_once_s, 0, KT_REMOVE_rm_short_once_s_length); const f_string_static_t kt_remove_rm_short_recursive_s = macro_f_string_static_t_initialize_1(KT_REMOVE_rm_short_recursive_s, 0, KT_REMOVE_rm_short_recursive_s_length); + const f_string_static_t kt_remove_rm_short_verbose_s = macro_f_string_static_t_initialize_1(KT_REMOVE_rm_short_verbose_s, 0, KT_REMOVE_rm_short_verbose_s_length); const f_string_static_t kt_remove_rm_long_directory_s = macro_f_string_static_t_initialize_1(KT_REMOVE_rm_long_directory_s, 0, KT_REMOVE_rm_long_directory_s_length); const f_string_static_t kt_remove_rm_long_one_filesystem_s = macro_f_string_static_t_initialize_1(KT_REMOVE_rm_long_one_filesystem_s, 0, KT_REMOVE_rm_long_one_filesystem_s_length); const f_string_static_t kt_remove_rm_long_recursive_s = macro_f_string_static_t_initialize_1(KT_REMOVE_rm_long_recursive_s, 0, KT_REMOVE_rm_long_recursive_s_length); const f_string_static_t kt_remove_rm_long_preserve_root_s = macro_f_string_static_t_initialize_1(KT_REMOVE_rm_long_preserve_root_s, 0, KT_REMOVE_rm_long_preserve_root_s_length); const f_string_static_t kt_remove_rm_long_preserve_root_not_s = macro_f_string_static_t_initialize_1(KT_REMOVE_rm_long_preserve_root_not_s, 0, KT_REMOVE_rm_long_preserve_root_not_s_length); + const f_string_static_t kt_remove_rm_long_verbose_s = macro_f_string_static_t_initialize_1(KT_REMOVE_rm_long_verbose_s, 0, KT_REMOVE_rm_long_verbose_s_length); const f_string_static_t kt_remove_rm_static_end_s = macro_f_string_static_t_initialize_1(KT_REMOVE_rm_static_end_s, 0, KT_REMOVE_rm_static_end_s_length); const f_string_static_t kt_remove_rm_static_interactive_always_s = macro_f_string_static_t_initialize_1(KT_REMOVE_rm_static_interactive_always_s, 0, KT_REMOVE_rm_static_interactive_always_s_length); const f_string_static_t kt_remove_rm_static_interactive_never_s = macro_f_string_static_t_initialize_1(KT_REMOVE_rm_static_interactive_never_s, 0, KT_REMOVE_rm_static_interactive_never_s_length); const f_string_static_t kt_remove_rm_static_interactive_once_s = macro_f_string_static_t_initialize_1(KT_REMOVE_rm_static_interactive_once_s, 0, KT_REMOVE_rm_static_interactive_once_s_length); const f_string_static_t kt_remove_rm_static_preserve_root_all_s = macro_f_string_static_t_initialize_1(KT_REMOVE_rm_static_preserve_root_all_s, 0, KT_REMOVE_rm_static_preserve_root_all_s_length); + const f_string_static_t kt_remove_rm_static_preserve_root_slash_s = macro_f_string_static_t_initialize_1(KT_REMOVE_rm_static_preserve_root_slash_s, 0, KT_REMOVE_rm_static_preserve_root_slash_s_length); #endif // _di_kt_remove_rm_parameter_s_ #ifdef __cplusplus diff --git a/sources/c/program/kevux/tools/remove/rm/string.h b/sources/c/program/kevux/tools/remove/rm/string.h index 8e60ccd..26f3b76 100644 --- a/sources/c/program/kevux/tools/remove/rm/string.h +++ b/sources/c/program/kevux/tools/remove/rm/string.h @@ -31,53 +31,65 @@ extern "C" { * Additional strings used for various purposes for the rm program. */ #ifndef _di_kt_remove_rm_parameter_s_ + #define KT_REMOVE_rm_short_directory_s "d" #define KT_REMOVE_rm_short_each_s "i" #define KT_REMOVE_rm_short_once_s "I" #define KT_REMOVE_rm_short_recursive_s "R" + #define KT_REMOVE_rm_short_verbose_s "v" #define KT_REMOVE_rm_long_directory_s "dir" #define KT_REMOVE_rm_long_one_filesystem_s "one-file-system" #define KT_REMOVE_rm_long_recursive_s "recursive" #define KT_REMOVE_rm_long_preserve_root_s "preserve-root" #define KT_REMOVE_rm_long_preserve_root_not_s "no-preserve-root" + #define KT_REMOVE_rm_long_verbose_s "verbose" - #define KT_REMOVE_rm_static_end_s "--" - #define KT_REMOVE_rm_static_interactive_always_s "--interactive=always" - #define KT_REMOVE_rm_static_interactive_never_s "--interactive=never" - #define KT_REMOVE_rm_static_interactive_once_s "--interactive=once" - #define KT_REMOVE_rm_static_preserve_root_all_s "--preserve-root=all" + #define KT_REMOVE_rm_static_end_s "--" + #define KT_REMOVE_rm_static_interactive_always_s "--interactive=always" + #define KT_REMOVE_rm_static_interactive_never_s "--interactive=never" + #define KT_REMOVE_rm_static_interactive_once_s "--interactive=once" + #define KT_REMOVE_rm_static_preserve_root_all_s "--preserve-root=all" + #define KT_REMOVE_rm_static_preserve_root_slash_s "--preserve-root=/" + #define KT_REMOVE_rm_short_directory_s_length 1 #define KT_REMOVE_rm_short_each_s_length 1 #define KT_REMOVE_rm_short_once_s_length 1 #define KT_REMOVE_rm_short_recursive_s_length 1 + #define KT_REMOVE_rm_short_verbose_s_length 1 #define KT_REMOVE_rm_long_directory_s_length 3 #define KT_REMOVE_rm_long_one_filesystem_s_length 15 #define KT_REMOVE_rm_long_recursive_s_length 9 #define KT_REMOVE_rm_long_preserve_root_s_length 13 #define KT_REMOVE_rm_long_preserve_root_not_s_length 16 + #define KT_REMOVE_rm_long_verbose_s_length 7 - #define KT_REMOVE_rm_static_end_s_length 2 - #define KT_REMOVE_rm_static_interactive_always_s_length 20 - #define KT_REMOVE_rm_static_interactive_never_s_length 19 - #define KT_REMOVE_rm_static_interactive_once_s_length 18 - #define KT_REMOVE_rm_static_preserve_root_all_s_length 19 + #define KT_REMOVE_rm_static_end_s_length 2 + #define KT_REMOVE_rm_static_interactive_always_s_length 20 + #define KT_REMOVE_rm_static_interactive_never_s_length 19 + #define KT_REMOVE_rm_static_interactive_once_s_length 18 + #define KT_REMOVE_rm_static_preserve_root_all_s_length 19 + #define KT_REMOVE_rm_static_preserve_root_slash_s_length 17 + extern const f_string_static_t kt_remove_rm_short_directory_s; extern const f_string_static_t kt_remove_rm_short_each_s; extern const f_string_static_t kt_remove_rm_short_once_s; extern const f_string_static_t kt_remove_rm_short_recursive_s; + extern const f_string_static_t kt_remove_rm_short_verbose_s; extern const f_string_static_t kt_remove_rm_long_directory_s; extern const f_string_static_t kt_remove_rm_long_one_filesystem_s; extern const f_string_static_t kt_remove_rm_long_recursive_s; extern const f_string_static_t kt_remove_rm_long_preserve_root_s; extern const f_string_static_t kt_remove_rm_long_preserve_root_not_s; + extern const f_string_static_t kt_remove_rm_long_verbose_s; extern const f_string_static_t kt_remove_rm_static_end_s; extern const f_string_static_t kt_remove_rm_static_interactive_always_s; extern const f_string_static_t kt_remove_rm_static_interactive_never_s; extern const f_string_static_t kt_remove_rm_static_interactive_once_s; extern const f_string_static_t kt_remove_rm_static_preserve_root_all_s; + extern const f_string_static_t kt_remove_rm_static_preserve_root_slash_s; #endif // _di_kt_remove_rm_parameter_s_ #ifdef __cplusplus -- 1.8.3.1