From: Kevin Day Date: Tue, 13 Aug 2024 03:33:51 +0000 (-0500) Subject: Bugfix: FSS Basic Read needs to properly handle --total when using --select and also... X-Git-Tag: 0.6.12~30 X-Git-Url: https://git.kevux.org/?a=commitdiff_plain;h=e06c82736572bd86d04f987ff3ed293821c932df;p=fll Bugfix: FSS Basic Read needs to properly handle --total when using --select and also --empty. The use of --select 0 and --total should result in either 0 or 1. The presence of --empty must also be taken into consideration. --- diff --git a/level_3/fss_basic_read/c/private-read.c b/level_3/fss_basic_read/c/private-read.c index 613f03b..6f3830f 100644 --- a/level_3/fss_basic_read/c/private-read.c +++ b/level_3/fss_basic_read/c/private-read.c @@ -634,29 +634,54 @@ extern "C" { f_status_t fss_basic_read_process_total(fll_program_data_t * const main, fss_basic_read_data_t * const data, bool names[]) { f_array_length_t total = 0; + f_array_length_t i = 0; - for (f_array_length_t i = 0; i < data->objects.used; ++i) { + if (data->option & fss_basic_read_data_option_select_d) { + if (!data->select) { + for (; i < data->contents.used; ++i) { - if (!names[i]) continue; + if (!names[i]) continue; - if (!((++main->signal_check) % fss_basic_read_signal_check_d)) { - if (fll_program_standard_signal_received(main)) { - fss_basic_read_print_signal_received(main); + if (!((++main->signal_check) % fss_basic_read_signal_check_d)) { + if (fll_program_standard_signal_received(main)) { + fss_basic_read_print_signal_received(main); - return F_status_set_error(F_interrupt); - } + return F_status_set_error(F_interrupt); + } - main->signal_check = 0; + main->signal_check = 0; + } + + if ((data->option & fss_basic_read_data_option_empty_d) || data->contents.array[i].used && data->contents.array[i].array[0].start <= data->contents.array[i].array[0].stop) { + ++total; + } + } // for } + } + else { + for (; i < data->objects.used; ++i) { - if (!(data->option & fss_basic_read_data_option_object_d) && data->option & fss_basic_read_data_option_content_d) { - if (!(data->contents.array[i].used || (data->option & fss_basic_read_data_option_empty_d))) { - continue; + if (!names[i]) continue; + + if (!((++main->signal_check) % fss_basic_read_signal_check_d)) { + if (fll_program_standard_signal_received(main)) { + fss_basic_read_print_signal_received(main); + + return F_status_set_error(F_interrupt); + } + + main->signal_check = 0; } - } - ++total; - } // for + if (!(data->option & fss_basic_read_data_option_object_d) && data->option & fss_basic_read_data_option_content_d) { + if (!(data->contents.array[i].used || (data->option & fss_basic_read_data_option_empty_d))) { + continue; + } + } + + ++total; + } // for + } flockfile(main->output.to.stream);