if (flag_operate & kt_remove_flag_operate_missing_d) {
status = kt_remove_operate_memory_save(main, path, flag_operate);
- if (F_status_is_error(status)) {
- kt_remove_print_error_file_status(&main->program.error, macro_kt_remove_f(kt_remove_operate_memory_save), path, f_file_operation_process_s, fll_error_file_type_path_e, status);
-
- return status;
- }
-
- if (!(main->setting.flag & kt_remove_main_flag_force_simulate_d)) {
- status = F_status_set_error(F_file_found_not);
-
- kt_remove_print_error_file_status(&main->program.error, macro_kt_remove_f(kt_remove_preprocess_file), path, f_file_operation_delete_s, fll_error_file_type_file_e, status);
-
- return status;
+ if (F_status_is_error(status) || !(main->setting.flag & kt_remove_main_flag_force_simulate_d)) {
+ kt_remove_print_error_file_status(
+ &main->program.error,
+ F_status_is_error_not(status)
+ ? macro_kt_remove_f(kt_remove_preprocess_file)
+ : macro_kt_remove_f(kt_remove_operate_memory_save),
+ path,
+ f_file_operation_process_s,
+ flag_operate & kt_remove_flag_operate_directory_d
+ ? fll_error_file_type_directory_e
+ : fll_error_file_type_file_e,
+ F_status_is_error_not(status)
+ ? F_status_set_error(F_file_found_not)
+ : status
+ );
+
+ return F_status_is_error_not(status) ? F_status_set_error(F_file_found_not) : status;
}
}
else {
// Ignore empty paths.
if (recurse->state.status == F_data_not) return;
+ // Do not print certain errors when force parameter is passed.
+ if (main->setting.flag & kt_remove_main_flag_force_d) {
+ if (F_status_set_fine(recurse->state.status) == F_directory_empty_not || F_status_set_fine(recurse->state.status) == F_file_empty_not) {
+ return;
+ }
+ }
+
if (flag & f_directory_recurse_do_flag_list_d && F_status_set_fine(recurse->state.status) == F_recurse) {
recurse->state.status = F_status_set_error(F_directory_empty_not);
- kt_remove_print_error_file_status(&main->program.error, macro_kt_remove_f(fl_directory_do), (!recurse->depth && (flag & f_directory_recurse_do_flag_after_d)) ? *recurse->path_top : recurse->path, f_file_operation_delete_s, fll_error_file_type_path_e, recurse->state.status);
+ if (!(main->setting.flag & kt_remove_main_flag_force_d)) {
+ kt_remove_print_error_file_status(
+ &main->program.error,
+ macro_kt_remove_f(fl_directory_do),
+ (!recurse->depth && (flag & f_directory_recurse_do_flag_after_d))
+ ? *recurse->path_top
+ : recurse->path,
+ f_file_operation_delete_s,
+ (!recurse->depth || flag == f_directory_recurse_do_flag_directory_d)
+ ? fll_error_file_type_directory_e
+ : fll_error_file_type_file_e,
+ recurse->state.status
+ );
+ }
return;
}
// The top-level path is an empty string or an error occurred while processing the top-level path.
if (!recurse->depth && (flag == f_directory_recurse_do_flag_path_d || flag == f_directory_recurse_do_flag_path_before_d)) {
- kt_remove_print_error_file_status(&main->program.error, macro_kt_remove_f(fl_directory_do), *recurse->path_top, f_file_operation_stat_s, fll_error_file_type_path_e, recurse->state.status);
+ kt_remove_print_error_file_status(
+ &main->program.error,
+ macro_kt_remove_f(fl_directory_do),
+ *recurse->path_top,
+ f_file_operation_stat_s,
+ !recurse->depth
+ ? fll_error_file_type_directory_e
+ : fll_error_file_type_file_e,
+ recurse->state.status
+ );
return;
}
- if (F_status_set_fine(recurse->state.status) == F_parameter || flag == f_directory_recurse_do_flag_path_list_d) {
- kt_remove_print_error_file_status(&main->program.error, macro_kt_remove_f(fl_directory_do), (!recurse->depth && (flag & f_directory_recurse_do_flag_after_d)) ? *recurse->path_top : recurse->path, f_file_operation_list_s, fll_error_file_type_directory_e, recurse->state.status);
+ if (F_status_set_fine(recurse->state.status) == F_parameter || flag == f_directory_recurse_do_flag_path_list_d || F_status_set_fine(recurse->state.status) == F_access_denied && flag == f_directory_recurse_do_flag_list_d) {
+ kt_remove_print_error_file_status(
+ &main->program.error,
+ macro_kt_remove_f(fl_directory_do),
+ !recurse->depth
+ ? *recurse->path_top
+ : recurse->path,
+ (F_status_set_fine(recurse->state.status) == F_access_denied && flag == f_directory_recurse_do_flag_list_d)
+ ? f_file_operation_delete_s
+ : f_file_operation_list_s,
+ (!recurse->depth || flag == f_directory_recurse_do_flag_directory_d)
+ ? fll_error_file_type_directory_e
+ : fll_error_file_type_file_e,
+ recurse->state.status
+ );
return;
}
- if (F_status_set_fine(recurse->state.status) == F_access_denied) {
- if (flag == f_directory_recurse_do_flag_list_d) {
- kt_remove_print_error_file_status(&main->program.error, macro_kt_remove_f(fl_directory_do), (!recurse->depth && (flag & f_directory_recurse_do_flag_action_d)) ? *recurse->path_top : recurse->path, f_file_operation_delete_s, fll_error_file_type_directory_e, recurse->state.status);
- }
-
- return;
- }
-
- kt_remove_print_error_file_status(&main->program.error, macro_kt_remove_f(fl_directory_do), (!recurse->depth && (flag & f_directory_recurse_do_flag_action_d)) ? *recurse->path_top : recurse->path, f_file_operation_delete_s, fll_error_file_type_path_e, recurse->state.status);
+ kt_remove_print_error_file_status(
+ &main->program.error,
+ macro_kt_remove_f(fl_directory_do),
+ (!recurse->depth && (flag & f_directory_recurse_do_flag_action_d))
+ ? *recurse->path_top
+ : recurse->path,
+ f_file_operation_delete_s,
+ (!recurse->depth || flag == f_directory_recurse_do_flag_directory_d)
+ ? fll_error_file_type_directory_e
+ : fll_error_file_type_file_e,
+ recurse->state.status
+ );
}
#endif // _di_kt_remove_operate_recurse_handle_
if (F_status_set_fine(status) == F_directory_empty_not && (flag_operate & kt_remove_flag_operate_remove_not_d)) {
status = F_no;
}
- else {
+ else if (flag_operate & kt_remove_flag_operate_directory_d) {
+ if (main->setting.flag & kt_remove_main_flag_force_d) {
+
+ // Do not treat this as an error when --force is passed.
+ if (F_status_set_fine(status) == F_directory_empty_not) {
+ status = F_no;
+ }
+ }
+ }
+ else if (!(main->setting.flag & kt_remove_main_flag_force_d) || F_status_set_fine(status) != F_directory_empty_not) {
kt_remove_print_error_file_status(
&main->program.error,
flag_operate & kt_remove_flag_operate_directory_d