From b080d2b225699a036be5881f8fd8c2ca989a5be5 Mon Sep 17 00:00:00 2001 From: Kevin Day Date: Tue, 8 Apr 2025 21:23:33 -0500 Subject: [PATCH] Feature: Add fll_program_signal_check_loop() and fll_program_signal_check_simple(). These functions are already implemented in each of the level 3 programs. The functions are pretty much identical. Move the signal check logic into the `fll_program` project as `fll_program_signal_check_loop()` and `fll_program_signal_check_simple()`. Update all of the programs, removing their variation and instead using one of these two. Utilize a macro to call one or the other based on thread enabled state. The fss_write payload is not calling the fss_write function and is instead using its own variation. Replace that code with the macro as well. Remove all stale and no longer needed signal check defines. --- build/disable/level_2/fll_program.h | 3 ++ build/stand_alone/byte_dump.config.h | 3 ++ build/stand_alone/example.config.h | 3 ++ build/stand_alone/fake.config.h | 3 ++ build/stand_alone/firewall.config.h | 3 ++ build/stand_alone/utf8.config.h | 3 ++ level_2/fll_program/c/private-program.c | 4 +-- level_2/fll_program/c/private-program.h | 5 +-- level_2/fll_program/c/program.c | 44 +++++++++++++++++++++++ level_2/fll_program/c/program.h | 54 +++++++++++++++++++++++++++++ level_2/fll_program/c/program/common.h | 10 ++++++ level_3/byte_dump/c/main/byte_dump.c | 2 +- level_3/byte_dump/c/main/common.c | 2 +- level_3/byte_dump/c/main/common/define.h | 17 +++++---- level_3/byte_dump/c/main/main.c | 2 +- level_3/byte_dump/c/main/process.c | 2 +- level_3/byte_dump/c/main/signal.c | 35 ------------------- level_3/byte_dump/c/main/signal.h | 32 ----------------- level_3/example/c/main/common/define.h | 17 +++++---- level_3/example/c/main/main.c | 2 +- level_3/example/c/main/signal.c | 35 ------------------- level_3/example/c/main/signal.h | 32 ----------------- level_3/fake/c/main/build.c | 10 +++--- level_3/fake/c/main/build/load.c | 6 ++-- level_3/fake/c/main/build/skeleton.c | 2 +- level_3/fake/c/main/common/define.h | 17 +++++---- level_3/fake/c/main/fake.c | 12 +++---- level_3/fake/c/main/fake/do.c | 2 +- level_3/fake/c/main/main.c | 2 +- level_3/fake/c/main/make/load_fakefile.c | 4 +-- level_3/fake/c/main/make/operate.c | 4 +-- level_3/fake/c/main/make/operate_process.c | 4 +-- level_3/fake/c/main/signal.c | 37 +------------------- level_3/fake/c/main/signal.h | 32 ----------------- level_3/firewall/c/main/common.c | 2 +- level_3/firewall/c/main/common/define.h | 17 +++++---- level_3/firewall/c/main/main.c | 2 +- level_3/firewall/c/main/operate.c | 6 ++-- level_3/firewall/c/main/operate/create.c | 4 +-- level_3/firewall/c/main/operate/default.c | 4 +-- level_3/firewall/c/main/operate/delete.c | 2 +- level_3/firewall/c/main/operate/process.c | 8 ++--- level_3/firewall/c/main/signal.c | 35 ------------------- level_3/firewall/c/main/signal.h | 32 ----------------- level_3/fss_identify/c/main/common.c | 6 ++-- level_3/fss_identify/c/main/common/define.h | 17 +++++---- level_3/fss_identify/c/main/fss_identify.c | 2 +- level_3/fss_identify/c/main/load.c | 2 +- level_3/fss_identify/c/main/main.c | 2 +- level_3/fss_identify/c/main/signal.c | 35 ------------------- level_3/fss_identify/c/main/signal.h | 32 ----------------- level_3/fss_read/c/basic/main.c | 2 +- level_3/fss_read/c/basic_list/main.c | 2 +- level_3/fss_read/c/embedded_list/main.c | 2 +- level_3/fss_read/c/embedded_list/process.c | 4 +-- level_3/fss_read/c/embedded_list/process.h | 12 +++---- level_3/fss_read/c/extended/main.c | 2 +- level_3/fss_read/c/extended_list/main.c | 2 +- level_3/fss_read/c/main/common.c | 12 +++---- level_3/fss_read/c/main/common.h | 4 +-- level_3/fss_read/c/main/common/define.h | 17 +++++---- level_3/fss_read/c/main/fss_read.h | 4 +-- level_3/fss_read/c/main/main.c | 2 +- level_3/fss_read/c/main/print/data.c | 4 +-- level_3/fss_read/c/main/process.c | 32 ++++++++--------- level_3/fss_read/c/main/process.h | 26 +++++++------- level_3/fss_read/c/main/signal.c | 35 ------------------- level_3/fss_read/c/main/signal.h | 32 ----------------- level_3/fss_read/c/payload/fss_read.h | 2 +- level_3/fss_read/c/payload/main.c | 2 +- level_3/fss_write/c/basic/main.c | 2 +- level_3/fss_write/c/basic_list/main.c | 2 +- level_3/fss_write/c/embedded_list/main.c | 2 +- level_3/fss_write/c/extended/main.c | 2 +- level_3/fss_write/c/extended_list/main.c | 2 +- level_3/fss_write/c/main/common/define.h | 17 +++++---- level_3/fss_write/c/main/fss_write.c | 4 +-- level_3/fss_write/c/main/main.c | 2 +- level_3/fss_write/c/main/signal.c | 35 ------------------- level_3/fss_write/c/main/signal.h | 32 ----------------- level_3/fss_write/c/payload/fss_write.c | 12 +------ level_3/fss_write/c/payload/main.c | 2 +- level_3/iki_read/c/eki/identify.c | 2 +- level_3/iki_read/c/eki/main.c | 2 +- level_3/iki_read/c/eki/process.c | 20 +++++------ level_3/iki_read/c/iki/identify.c | 2 +- level_3/iki_read/c/iki/main.c | 2 +- level_3/iki_read/c/iki/process.c | 14 ++++---- level_3/iki_read/c/main/common/define.h | 17 +++++---- level_3/iki_read/c/main/iki_read.c | 4 +-- level_3/iki_read/c/main/print/data.c | 4 +-- level_3/iki_read/c/main/print/data.h | 10 +++--- level_3/iki_read/c/main/signal.c | 35 ------------------- level_3/iki_read/c/main/signal.h | 32 ----------------- level_3/iki_write/c/eki/common.c | 4 +-- level_3/iki_write/c/eki/main.c | 2 +- level_3/iki_write/c/eki/process.c | 4 +-- level_3/iki_write/c/iki/common.c | 4 +-- level_3/iki_write/c/iki/main.c | 2 +- level_3/iki_write/c/main/common/define.h | 17 +++++---- level_3/iki_write/c/main/iki_write.c | 4 +-- level_3/iki_write/c/main/signal.c | 35 ------------------- level_3/iki_write/c/main/signal.h | 32 ----------------- level_3/status_code/c/fss/main.c | 2 +- level_3/status_code/c/main/common/define.h | 17 +++++---- level_3/status_code/c/main/main.c | 2 +- level_3/status_code/c/main/signal.c | 35 ------------------- level_3/status_code/c/main/signal.h | 32 ----------------- level_3/status_code/c/main/status_code.c | 6 ++-- level_3/utf8/c/main/bytesequence.c | 2 +- level_3/utf8/c/main/codepoint.c | 2 +- level_3/utf8/c/main/common/define.h | 17 +++++---- level_3/utf8/c/main/main.c | 2 +- level_3/utf8/c/main/process.c | 2 +- level_3/utf8/c/main/signal.c | 35 ------------------- level_3/utf8/c/main/signal.h | 32 ----------------- level_3/utf8/c/main/utf8.c | 4 +-- 117 files changed, 419 insertions(+), 984 deletions(-) diff --git a/build/disable/level_2/fll_program.h b/build/disable/level_2/fll_program.h index c64a7fc..2d8c200 100644 --- a/build/disable/level_2/fll_program.h +++ b/build/disable/level_2/fll_program.h @@ -57,6 +57,9 @@ #define _di_fll_program_print_version_ #define _di_fll_program_s_a_ #define _di_fll_program_s_e_ +#define _di_fll_program_signal_check_loop_ +#define _di_fll_program_signal_check_simple_ +#define _di_fll_program_signal_d_ #define _di_fll_program_standard_set_down_ #define _di_fll_program_standard_set_up_ #define _di_fll_program_standard_signal_handle_ diff --git a/build/stand_alone/byte_dump.config.h b/build/stand_alone/byte_dump.config.h index 77b520a..5bbafe4 100644 --- a/build/stand_alone/byte_dump.config.h +++ b/build/stand_alone/byte_dump.config.h @@ -1698,6 +1698,9 @@ //#define _di_fll_program_print_version_ //#define _di_fll_program_s_a_ //#define _di_fll_program_s_e_ +//#define _di_fll_program_signal_check_loop_ +//#define _di_fll_program_signal_check_simple_ +//#define _di_fll_program_signal_d_ //#define _di_fll_program_standard_set_down_ //#define _di_fll_program_standard_set_up_ //#define _di_fll_program_standard_signal_handle_ diff --git a/build/stand_alone/example.config.h b/build/stand_alone/example.config.h index 05682a4..2dfbf76 100644 --- a/build/stand_alone/example.config.h +++ b/build/stand_alone/example.config.h @@ -1637,6 +1637,9 @@ //#define _di_fll_program_print_version_ //#define _di_fll_program_s_a_ //#define _di_fll_program_s_e_ +//#define _di_fll_program_signal_check_loop_ +//#define _di_fll_program_signal_check_simple_ +//#define _di_fll_program_signal_d_ //#define _di_fll_program_standard_set_down_ //#define _di_fll_program_standard_set_up_ //#define _di_fll_program_standard_signal_handle_ diff --git a/build/stand_alone/fake.config.h b/build/stand_alone/fake.config.h index 33229cf..800dab5 100644 --- a/build/stand_alone/fake.config.h +++ b/build/stand_alone/fake.config.h @@ -2205,6 +2205,9 @@ //#define _di_fll_program_print_version_ //#define _di_fll_program_s_a_ //#define _di_fll_program_s_e_ +//#define _di_fll_program_signal_check_loop_ +//#define _di_fll_program_signal_check_simple_ +//#define _di_fll_program_signal_d_ //#define _di_fll_program_standard_set_down_ //#define _di_fll_program_standard_set_up_ //#define _di_fll_program_standard_signal_handle_ diff --git a/build/stand_alone/firewall.config.h b/build/stand_alone/firewall.config.h index 98f976e..1b53451 100644 --- a/build/stand_alone/firewall.config.h +++ b/build/stand_alone/firewall.config.h @@ -2289,6 +2289,9 @@ //#define _di_fll_program_print_version_ //#define _di_fll_program_s_a_ //#define _di_fll_program_s_e_ +//#define _di_fll_program_signal_check_loop_ +//#define _di_fll_program_signal_check_simple_ +//#define _di_fll_program_signal_d_ //#define _di_fll_program_standard_set_down_ //#define _di_fll_program_standard_set_up_ //#define _di_fll_program_standard_signal_handle_ diff --git a/build/stand_alone/utf8.config.h b/build/stand_alone/utf8.config.h index c3f99ad..4ab1e4f 100644 --- a/build/stand_alone/utf8.config.h +++ b/build/stand_alone/utf8.config.h @@ -1716,6 +1716,9 @@ //#define _di_fll_program_print_version_ //#define _di_fll_program_s_a_ //#define _di_fll_program_s_e_ +//#define _di_fll_program_signal_check_loop_ +//#define _di_fll_program_signal_check_simple_ +//#define _di_fll_program_signal_d_ //#define _di_fll_program_standard_set_down_ //#define _di_fll_program_standard_set_up_ //#define _di_fll_program_standard_signal_handle_ diff --git a/level_2/fll_program/c/private-program.c b/level_2/fll_program/c/private-program.c index e1dd064..99dc937 100644 --- a/level_2/fll_program/c/private-program.c +++ b/level_2/fll_program/c/private-program.c @@ -77,7 +77,7 @@ extern "C" { } #endif // !defined(_di_fll_program_print_help_option_) || !defined(_di_fll_program_print_help_option_standard_) -#if !defined(_di_fll_program_standard_signal_received_) || !defined(_di_fll_program_standard_signal_handle_) +#if !defined(_di_fll_program_signal_check_loop_) || !defined(_di_fll_program_standard_signal_received_) || !defined(_di_fll_program_standard_signal_handle_) f_status_t private_fll_program_standard_signal_received(fll_program_data_t * const program) { if (!program || program->signal.id == -1) return F_status_set_error(F_parameter); @@ -105,7 +105,7 @@ extern "C" { return F_interrupt_not; } -#endif // !defined(_di_fll_program_standard_signal_received_) || !defined(_di_fll_program_standard_signal_handle_) +#endif // !defined(_di_fll_program_signal_check_loop_) || !defined(_di_fll_program_standard_signal_received_) || !defined(_di_fll_program_standard_signal_handle_) #if !defined(_di_fll_program_parameter_process_context_) || !defined(_di_fll_program_parameter_process_context_standard_) || !defined(_di_fll_program_parameter_process_empty_) void private_fll_program_parameter_process_empty(f_color_context_t * const context, f_color_set_t * const sets[]) { diff --git a/level_2/fll_program/c/private-program.h b/level_2/fll_program/c/private-program.h index 3db7ba5..ed2ba4b 100644 --- a/level_2/fll_program/c/private-program.h +++ b/level_2/fll_program/c/private-program.h @@ -103,12 +103,13 @@ extern "C" { * * @see f_signal_read() * + * @see fll_program_signal_check_loop() * @see fll_program_standard_signal_received() * @see fll_program_standard_signal_handle() */ -#if !defined(_di_fll_program_standard_signal_received_) || !defined(_di_fll_program_standard_signal_handle_) +#if !defined(_di_fll_program_signal_check_loop_) || !defined(_di_fll_program_standard_signal_received_) || !defined(_di_fll_program_standard_signal_handle_) f_status_t private_fll_program_standard_signal_received(fll_program_data_t * const program) F_attribute_visibility_internal_d; -#endif // !defined(_di_fll_program_standard_signal_received_) || !defined(_di_fll_program_standard_signal_handle_) +#endif // !defined(_di_fll_program_signal_check_loop_) || !defined(_di_fll_program_standard_signal_received_) || !defined(_di_fll_program_standard_signal_handle_) /** * Private implementation of fll_program_parameter_process_empty(). diff --git a/level_2/fll_program/c/program.c b/level_2/fll_program/c/program.c index c2ad94e..7b315d7 100644 --- a/level_2/fll_program/c/program.c +++ b/level_2/fll_program/c/program.c @@ -234,6 +234,50 @@ extern "C" { } #endif // _di_fll_program_parameter_additional_rip_mash_ +#ifndef _di_fll_program_signal_check_loop_ + f_status_t fll_program_signal_check_loop(fll_program_data_t * const program, f_state_t * const state) { + + if (!program) return F_false; + + if (program->signal_received) { + if (state) { + state->status = F_status_set_error(F_interrupt); + } + + return F_true; + } + + if (!((++program->signal_check) % fll_program_signal_check_d)) { + if (F_status_set_fine(private_fll_program_standard_signal_received(program)) == F_interrupt) { + if (state) { + state->status = F_status_set_error(F_interrupt); + } + + return F_true; + } + + program->signal_check = 0; + } + + return F_false; + } +#endif // _di_fll_program_signal_check_loop_ + +#ifndef _di_fll_program_signal_check_simple_ + f_status_t fll_program_signal_check_simple(fll_program_data_t * const program, f_state_t * const state) { + + if (program && program->signal_received) { + if (state) { + state->status = F_status_set_error(F_interrupt); + } + + return F_true; + } + + return F_false; + } +#endif // _di_fll_program_signal_check_simple_ + #ifndef _di_fll_program_standard_set_down_ f_status_t fll_program_standard_set_down(fll_program_data_t * const program) { #ifndef _di_level_2_parameter_checking_ diff --git a/level_2/fll_program/c/program.h b/level_2/fll_program/c/program.h index 1a190b4..4ebe6be 100644 --- a/level_2/fll_program/c/program.h +++ b/level_2/fll_program/c/program.h @@ -308,6 +308,60 @@ extern "C" { #endif // _di_fll_program_parameter_additional_rip_mash_ /** + * Check to see if a signal is received, using a loop.. + * + * This checks if program.signal_received is non-zero and if so then it returns TRUE. + * + * There is ideal for use in a non-threaded build. + * This checks periodically using fll_program_standard_signal_received() and updates program.signal_check as needed. + * + * @param program + * The program data. + * + * This alters program.signal_check as needed. + * This does not alter program.signal_received. + * + * @param state + * The state data. + * + * If specified, then this alters state.status, setting it to F_status_set_error(F_interrupt) on interrupt. + * + * @return + * F_true on signal received. + * F_false otherwise (even when program is NULL). + * + * @see fll_program_standard_signal_received() + */ +#ifndef _di_fll_program_signal_check_loop_ + extern f_status_t fll_program_signal_check_loop(fll_program_data_t * const program, f_state_t * const state); +#endif // _di_fll_program_signal_check_loop_ + +/** + * Check to see if a signal is received, using a simple check. + * + * There is ideal for use in a threaded build. + * The caller should have a thread that assigns the program.signal_received to some non-zero value for this to work. + * + * @param program + * The program data. + * + * This does not alter program.signal_check. + * This does not alter program.signal_received. + * + * @param state + * The state data. + * + * If specified, then this alters state.status, setting it to F_status_set_error(F_interrupt) on interrupt. + * + * @return + * F_true on signal received (when program.signal_received is non-zero). + * F_false otherwise (even when program is NULL). + */ +#ifndef _di_fll_program_signal_check_simple_ + extern f_status_t fll_program_signal_check_simple(fll_program_data_t * const program, f_state_t * const state); +#endif // _di_fll_program_signal_check_simple_ + +/** * This provides a standard program set down operations used by FLL programs. * * This does the following: diff --git a/level_2/fll_program/c/program/common.h b/level_2/fll_program/c/program/common.h index 932dd2a..5c0ce20 100644 --- a/level_2/fll_program/c/program/common.h +++ b/level_2/fll_program/c/program/common.h @@ -56,6 +56,16 @@ extern "C" { #endif // _di_fll_program_copyright_s_ /** + * A standard signal flags. + * + * fll_program_signal_*_d: + * - check: A for fll_program_signal_loop() for determining when to make the check. + */ +#ifndef _di_fll_program_signal_d_ + #define fll_program_signal_check_d 500000 +#endif // _di_fll_program_signal_d_ + +/** * Program data pipe codes. * * These are bit-wise codes used to designate that a particular pipe exists and is to be used. diff --git a/level_3/byte_dump/c/main/byte_dump.c b/level_3/byte_dump/c/main/byte_dump.c index bc094d3..57d02a1 100644 --- a/level_3/byte_dump/c/main/byte_dump.c +++ b/level_3/byte_dump/c/main/byte_dump.c @@ -51,7 +51,7 @@ extern "C" { for (f_number_unsigned_t i = 0; i < main->setting.files.used; ++i) { - if (byte_dump_signal_check(main)) break; + if (macro_byte_dump_signal_check(&main->program, &main->setting.state)) break; if (!main->setting.files.array[i].used) continue; main->setting.state.status = f_file_stream_open(main->setting.files.array[i], f_string_empty_s, &file); diff --git a/level_3/byte_dump/c/main/common.c b/level_3/byte_dump/c/main/common.c index 28cc60b..5e3c373 100644 --- a/level_3/byte_dump/c/main/common.c +++ b/level_3/byte_dump/c/main/common.c @@ -288,7 +288,7 @@ extern "C" { for (index = 0; index < parameters->remaining.used; ++index) { - if (byte_dump_signal_check(main)) return; + if (macro_byte_dump_signal_check(&main->program, &main->setting.state)) return; number = parameters->remaining.array[index]; diff --git a/level_3/byte_dump/c/main/common/define.h b/level_3/byte_dump/c/main/common/define.h index a74884b..df1fe4f 100644 --- a/level_3/byte_dump/c/main/common/define.h +++ b/level_3/byte_dump/c/main/common/define.h @@ -93,18 +93,23 @@ extern "C" { * The program signal defines. * * byte_dump_signal_*_d: - * - check: Number of iterations before performing signal check in non-threaded signal handling. * - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe). - * - check_tiny: The tiny check. - * - check_short: The short signal check. */ #ifndef _di_byte_dump_signal_d_ - #define byte_dump_signal_check_d 500000 #define byte_dump_signal_check_failsafe_d 20000 - #define byte_dump_signal_check_tiny_d 4 - #define byte_dump_signal_check_short_d 16 #endif // _di_byte_dump_signal_d_ +/** + * A macro wrapping the appropriate signal check function based on threaded/non-threaded support. + */ +#ifndef _di_byte_dump_signal_check_d_ + #ifdef _di_thread_support_ + #define macro_byte_dump_signal_check(program, state) fll_program_signal_check_loop(program, state) + #else + #define macro_byte_dump_signal_check(program, state) fll_program_signal_check_simple(program, state) + #endif // _di_thread_support_ +#endif // _di_byte_dump_signal_check_d_ + #ifdef __cplusplus } // extern "C" #endif diff --git a/level_3/byte_dump/c/main/main.c b/level_3/byte_dump/c/main/main.c index 2e59733..1c08485 100644 --- a/level_3/byte_dump/c/main/main.c +++ b/level_3/byte_dump/c/main/main.c @@ -55,7 +55,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { byte_dump_setting_load(arguments, &data); } - if (!byte_dump_signal_check(&data)) { + if (!macro_byte_dump_signal_check(&data.program, &data.setting.state)) { byte_dump_main(&data); } diff --git a/level_3/byte_dump/c/main/process.c b/level_3/byte_dump/c/main/process.c index cb9366d..1335eea 100644 --- a/level_3/byte_dump/c/main/process.c +++ b/level_3/byte_dump/c/main/process.c @@ -56,7 +56,7 @@ extern "C" { if (byte_get >= 0) { for (;;) { - if (byte_dump_signal_check(main)) return; + if (macro_byte_dump_signal_check(&main->program, &main->setting.state)) return; byte_get = getc(file.stream); diff --git a/level_3/byte_dump/c/main/signal.c b/level_3/byte_dump/c/main/signal.c index d092802..0ad7596 100644 --- a/level_3/byte_dump/c/main/signal.c +++ b/level_3/byte_dump/c/main/signal.c @@ -4,41 +4,6 @@ extern "C" { #endif -#if !defined(_di_byte_dump_signal_check_) && defined(_di_thread_support_) - f_status_t byte_dump_signal_check(byte_dump_main_t * const main) { - - if (!main) return F_false; - if (main->program.signal_received) return F_true; - - if (!((++main->program.signal_check) % byte_dump_signal_check_d)) { - if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - main->program.signal_check = 0; - } - - return F_false; - } -#endif // !defined(_di_byte_dump_signal_check_) && defined(_di_thread_support_) - -#if !defined(_di_byte_dump_signal_check_) && !defined(_di_thread_support_) - f_status_t byte_dump_signal_check(byte_dump_main_t * const main) { - - if (!main) return F_false; - - if (main->program.signal_received) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - return F_false; - } -#endif // !defined(_di_byte_dump_signal_check_) && !defined(_di_thread_support_) - #if !defined(_di_byte_dump_signal_handler_) && !defined(_di_thread_support_) void byte_dump_signal_handler(byte_dump_main_t * const main) { diff --git a/level_3/byte_dump/c/main/signal.h b/level_3/byte_dump/c/main/signal.h index d2a8397..c449798 100644 --- a/level_3/byte_dump/c/main/signal.h +++ b/level_3/byte_dump/c/main/signal.h @@ -17,38 +17,6 @@ extern "C" { #endif /** - * Check to see if a signal is received. - * - * If main.signal is non-zero, then this handles the following signals: - * - F_signal_abort - * - F_signal_broken_pipe - * - F_signal_hangup - * - F_signal_interrupt - * - F_signal_quit - * - F_signal_termination - * - * There is a threaded and a non-threaded version of this. - * The non-threaded version checks periodically using byte_dump_signal_check_d and updates main->signal_check as needed. - * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received. - * - * @param main - * The main program and settings data. - * - * This does not alter main.setting.state.status. - * - * @return - * F_true on signal received. - * F_false otherwise. - * - * @see byte_dump_signal_handler() - * - * @see fll_program_standard_signal_received() - */ -#ifndef _di_byte_dump_signal_check_ - extern f_status_t byte_dump_signal_check(byte_dump_main_t * const main); -#endif // _di_byte_dump_signal_check_ - -/** * Signal handler for signals/interrupts. * * This blocks until an expected signal is recieved. diff --git a/level_3/example/c/main/common/define.h b/level_3/example/c/main/common/define.h index 1ead0dc..441a2ea 100644 --- a/level_3/example/c/main/common/define.h +++ b/level_3/example/c/main/common/define.h @@ -87,18 +87,23 @@ extern "C" { * The program signal defines. * * example_signal_*_d: - * - check: Number of iterations before performing signal check in non-threaded signal handling. * - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe). - * - check_tiny: The tiny check. - * - check_short: The short signal check. */ #ifndef _di_example_signal_d_ - #define example_signal_check_d 500000 #define example_signal_check_failsafe_d 20000 - #define example_signal_check_tiny_d 4 - #define example_signal_check_short_d 16 #endif // _di_example_signal_d_ +/** + * A macro wrapping the appropriate signal check function based on threaded/non-threaded support. + */ +#ifndef _di_example_signal_check_d_ + #ifdef _di_thread_support_ + #define macro_example_signal_check(program, state) fll_program_signal_check_loop(program, state) + #else + #define macro_example_signal_check(program, state) fll_program_signal_check_simple(program, state) + #endif // _di_thread_support_ +#endif // _di_example_signal_check_d_ + #ifdef __cplusplus } // extern "C" #endif diff --git a/level_3/example/c/main/main.c b/level_3/example/c/main/main.c index b3d41d2..9fd6ac2 100644 --- a/level_3/example/c/main/main.c +++ b/level_3/example/c/main/main.c @@ -58,7 +58,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { example_setting_load(arguments, &data); } - if (!example_signal_check(&data)) { + if (!macro_example_signal_check(&data.program, &data.setting.state)) { example_main(&data); } diff --git a/level_3/example/c/main/signal.c b/level_3/example/c/main/signal.c index 7a3972b..8f09d4e 100644 --- a/level_3/example/c/main/signal.c +++ b/level_3/example/c/main/signal.c @@ -4,41 +4,6 @@ extern "C" { #endif -#if !defined(_di_example_signal_check_) && defined(_di_thread_support_) - f_status_t example_signal_check(example_main_t * const main) { - - if (!main) return F_false; - if (main->program.signal_received) return F_true; - - if (!((++main->program.signal_check) % example_signal_check_d)) { - if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - main->program.signal_check = 0; - } - - return F_false; - } -#endif // !defined(_di_example_signal_check_) && defined(_di_thread_support_) - -#if !defined(_di_example_signal_check_) && !defined(_di_thread_support_) - f_status_t example_signal_check(example_main_t * const main) { - - if (!main) return F_false; - - if (main->program.signal_received) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - return F_false; - } -#endif // !defined(_di_example_signal_check_) && !defined(_di_thread_support_) - #if !defined(_di_example_signal_handler_) && !defined(_di_thread_support_) void example_signal_handler(example_main_t * const main) { diff --git a/level_3/example/c/main/signal.h b/level_3/example/c/main/signal.h index d38c3e0..3137967 100644 --- a/level_3/example/c/main/signal.h +++ b/level_3/example/c/main/signal.h @@ -17,38 +17,6 @@ extern "C" { #endif /** - * Check to see if a signal is received. - * - * If main.signal is non-zero, then this handles the following signals: - * - F_signal_abort - * - F_signal_broken_pipe - * - F_signal_hangup - * - F_signal_interrupt - * - F_signal_quit - * - F_signal_termination - * - * There is a threaded and a non-threaded version of this. - * The non-threaded version checks periodically using example_signal_check_d and updates main->signal_check as needed. - * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received. - * - * @param main - * The main program and settings data. - * - * This does not alter main.setting.state.status. - * - * @return - * F_true on signal received. - * F_false otherwise. - * - * @see example_signal_handler() - * - * @see fll_program_standard_signal_received() - */ -#ifndef _di_example_signal_check_ - extern f_status_t example_signal_check(example_main_t * const main); -#endif // _di_example_signal_check_ - -/** * Signal handler for signals/interrupts. * * This blocks until an expected signal is recieved. diff --git a/level_3/fake/c/main/build.c b/level_3/fake/c/main/build.c index 4ef3cce..2ace0c0 100644 --- a/level_3/fake/c/main/build.c +++ b/level_3/fake/c/main/build.c @@ -169,7 +169,7 @@ extern "C" { if (!data || !data->main) return; if (data->main->setting.state.status == F_child) return; if (F_status_is_error(data->main->setting.state.status) || f_file_exists(file_stage, F_true) == F_true) return; - if (fake_signal_check(data->main)) return; + if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return; fake_main_t * const main = data->main; @@ -206,7 +206,7 @@ extern "C" { for (f_number_unsigned_t i = 0; i < files.used; ++i) { - if (fake_signal_check(main)) break; + if (macro_fake_signal_check(&main->program, &main->setting.state)) break; if (!files.array[i].used) continue; fake_string_dynamic_reset(&main->cache_map.value); @@ -519,7 +519,7 @@ extern "C" { main->setting.state.status = fll_execute_program(main->cache_argument, main->cache_arguments, ¶meter, 0, (void *) &return_code); - if (fake_signal_check(main)) return return_code; + if (macro_fake_signal_check(&main->program, &main->setting.state)) return return_code; if (main->setting.state.status != F_child) { if (F_status_is_error(main->setting.state.status)) { @@ -616,7 +616,7 @@ extern "C" { if (!data || !data->main) return; if (F_status_is_error(data->main->setting.state.status)) return; - if (fake_signal_check(data->main)) return; + if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return; fake_main_t * const main = data->main; @@ -879,7 +879,7 @@ extern "C" { if (!data || !data->main) return; if (F_status_is_error(data->main->setting.state.status)) return; - if (fake_signal_check(data->main)) return; + if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return; fake_main_t * const main = data->main; diff --git a/level_3/fake/c/main/build/load.c b/level_3/fake/c/main/build/load.c index 8b9fc74..d85ca33 100644 --- a/level_3/fake/c/main/build/load.c +++ b/level_3/fake/c/main/build/load.c @@ -66,7 +66,7 @@ extern "C" { if (!data || !data->main || !setting) return; if (F_status_is_error(data->main->setting.state.status)) return; - if (fake_signal_check(data->main)) return; + if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return; fake_main_t * const main = data->main; @@ -206,7 +206,7 @@ extern "C" { if (!data || !data->main || !setting) return; if (F_status_is_error(data->main->setting.state.status) && buffer.used) return; - if (fake_signal_check(data->main)) return; + if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return; fake_main_t * const main = data->main; @@ -1739,7 +1739,7 @@ extern "C" { if (!data || !data->main || !data_build || !stage) return; if (F_status_is_error(data->main->setting.state.status)) return; - if (fake_signal_check(data->main)) return; + if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return; fake_main_t * const main = data->main; diff --git a/level_3/fake/c/main/build/skeleton.c b/level_3/fake/c/main/build/skeleton.c index 0dfac33..d700ecc 100644 --- a/level_3/fake/c/main/build/skeleton.c +++ b/level_3/fake/c/main/build/skeleton.c @@ -65,7 +65,7 @@ extern "C" { for (j = 0; j < directorys[i].used; ++j) { if (f_path_separator_s.used && directorys[i].string[j] != f_path_separator_s.string[0]) continue; - if (fake_signal_check(data->main)) return; + if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return; directorys[i].string[j] = 0; diff --git a/level_3/fake/c/main/common/define.h b/level_3/fake/c/main/common/define.h index deb1608..04347f9 100644 --- a/level_3/fake/c/main/common/define.h +++ b/level_3/fake/c/main/common/define.h @@ -123,19 +123,24 @@ extern "C" { * The program signal defines. * * fake_signal_*_d: - * - check: Number of iterations before performing signal check in non-threaded signal handling. * - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe). - * - check_tiny: The tiny check. - * - check_short: The short signal check. */ #ifndef _di_fake_signal_d_ - #define fake_signal_check_d 500000 #define fake_signal_check_failsafe_d 20000 - #define fake_signal_check_tiny_d 4 - #define fake_signal_check_short_d 16 #endif // _di_fake_signal_d_ /** + * A macro wrapping the appropriate signal check function based on threaded/non-threaded support. + */ +#ifndef _di_fake_signal_check_d_ + #ifdef _di_thread_support_ + #define macro_fake_signal_check(program, state) fll_program_signal_check_loop(program, state) + #else + #define macro_fake_signal_check(program, state) fll_program_signal_check_simple(program, state) + #endif // _di_thread_support_ +#endif // _di_fake_signal_check_d_ + +/** * Flags for the code property in the f_state_t structure. * * fake_state_code_*_d: diff --git a/level_3/fake/c/main/fake.c b/level_3/fake/c/main/fake.c index 089e84f..69a40c3 100644 --- a/level_3/fake/c/main/fake.c +++ b/level_3/fake/c/main/fake.c @@ -113,7 +113,7 @@ extern "C" { break; } - if (fake_signal_check(main)) break; + if (macro_fake_signal_check(&main->program, &main->setting.state)) break; } // for } @@ -164,7 +164,7 @@ extern "C" { } if (main->setting.state.status == F_child) break; - if (F_status_set_fine(main->setting.state.status) == F_interrupt || fake_signal_check(main)) break; + if (F_status_set_fine(main->setting.state.status) == F_interrupt || macro_fake_signal_check(&main->program, &main->setting.state)) break; if (F_status_is_error(main->setting.state.status)) break; } // for } @@ -232,7 +232,7 @@ extern "C" { fl_execute_parameter_t parameter = macro_fl_execute_parameter_t_initialize_1(0, 0, &environment, &signals, 0); main->setting.state.status = fll_execute_program(program, main->cache_arguments, ¶meter, 0, (void *) &return_code); - if (fake_signal_check(data->main)) return return_code; + if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return return_code; if (main->setting.state.status == F_child) return return_code; } else { @@ -261,7 +261,7 @@ extern "C" { void fake_file_buffer(fake_data_t * const data, const f_string_static_t path_file, const bool required, f_string_dynamic_t * const buffer) { if (!data || !data->main || !buffer) return; - if (fake_signal_check(data->main)) return; + if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return; fake_main_t * const main = data->main; @@ -360,7 +360,7 @@ extern "C" { clearerr(F_type_input_d); do { - if (fake_signal_check(main)) return; + if (macro_fake_signal_check(&main->program, &main->setting.state)) return; main->setting.state.status = f_file_stream_read_block(file, buffer); @@ -379,7 +379,7 @@ extern "C" { void fake_validate_parameter_paths(fake_data_t * const data) { if (!data || !data->main) return; - if (fake_signal_check(data->main)) return; + if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return; fake_main_t * const main = data->main; diff --git a/level_3/fake/c/main/fake/do.c b/level_3/fake/c/main/fake/do.c index feb0312..70a8715 100644 --- a/level_3/fake/c/main/fake/do.c +++ b/level_3/fake/c/main/fake/do.c @@ -13,7 +13,7 @@ extern "C" { if (!local->main) return; - if (fake_signal_check(local->main)) { + if (macro_fake_signal_check(&local->main->program, &local->main->setting.state)) { recurse->state.status = F_status_set_error(F_interrupt); return; diff --git a/level_3/fake/c/main/main.c b/level_3/fake/c/main/main.c index a774b69..bec7063 100644 --- a/level_3/fake/c/main/main.c +++ b/level_3/fake/c/main/main.c @@ -64,7 +64,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { fake_setting_load(arguments, &data); } - if (!fake_signal_check(&data)) { + if (!macro_fake_signal_check(&data.program, &data.setting.state)) { fake_main(&data); } diff --git a/level_3/fake/c/main/make/load_fakefile.c b/level_3/fake/c/main/make/load_fakefile.c index e53b14e..66d1123 100644 --- a/level_3/fake/c/main/make/load_fakefile.c +++ b/level_3/fake/c/main/make/load_fakefile.c @@ -9,7 +9,7 @@ extern "C" { if (!data_make || !data_make->data || !data_make->main) return; if (F_status_is_error(data_make->main->setting.state.status)) return; - if (fake_signal_check(data_make->main)) return; + if (macro_fake_signal_check(&data_make->main->program, &data_make->main->setting.state)) return; data_make->fakefile.used = 0; @@ -96,7 +96,7 @@ extern "C" { for (f_number_unsigned_t i = 0; i < list_objects.used; ++i) { - if (fake_signal_check(data_make->main)) break; + if (macro_fake_signal_check(&data_make->main->program, &data_make->main->setting.state)) break; if (f_compare_dynamic_partial_string(fake_make_item_settings_s.string, data_make->main->buffer, fake_make_item_settings_s.used, list_objects.array[i]) == F_equal_to) { if (!missing_settings) { diff --git a/level_3/fake/c/main/make/operate.c b/level_3/fake/c/main/make/operate.c index 58f443c..e43f0ab 100644 --- a/level_3/fake/c/main/make/operate.c +++ b/level_3/fake/c/main/make/operate.c @@ -8,7 +8,7 @@ extern "C" { void fake_make_operate(fake_data_t * const data) { if (!data || !data->main) return; - if (fake_signal_check(data->main)) return; + if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return; fake_main_t * const main = data->main; @@ -1431,7 +1431,7 @@ extern "C" { for (j = 0; j < fake_max_operation_d; ++j) { - if (fake_signal_check(main)) break; + if (macro_fake_signal_check(&main->program, &main->setting.state)) break; if (f_compare_dynamic_partial_string(operations_name[j].string, main->buffer, operations_name[j].used, section->objects.array[i]) == F_equal_to) { state_process.operation = operations_type[j]; diff --git a/level_3/fake/c/main/make/operate_process.c b/level_3/fake/c/main/make/operate_process.c index 7f44aff..5cb7aef 100644 --- a/level_3/fake/c/main/make/operate_process.c +++ b/level_3/fake/c/main/make/operate_process.c @@ -290,7 +290,7 @@ extern "C" { fake_main_t * const main = data_make->main; - if (fake_signal_check(main)) return; + if (macro_fake_signal_check(&main->program, &main->setting.state)) return; // Reset the environment. for (f_number_unsigned_t i = 0; i < data_make->environment.used; ++i) { @@ -333,7 +333,7 @@ extern "C" { main->setting.state.status = fll_execute_program(program, arguments, ¶meter, 0, (void *) &return_code); - if (fake_signal_check(main)) return; + if (macro_fake_signal_check(&main->program, &main->setting.state)) return; if (F_status_is_error(main->setting.state.status)) { if (F_status_set_fine(main->setting.state.status) == F_interrupt) return; diff --git a/level_3/fake/c/main/signal.c b/level_3/fake/c/main/signal.c index f102697..a01ac3b 100644 --- a/level_3/fake/c/main/signal.c +++ b/level_3/fake/c/main/signal.c @@ -4,41 +4,6 @@ extern "C" { #endif -#if !defined(_di_fake_signal_check_) && defined(_di_thread_support_) - f_status_t fake_signal_check(fake_main_t * const main) { - - if (!main) return F_false; - if (main->program.signal_received) return F_true; - - if (!((++main->program.signal_check) % fake_signal_check_d)) { - if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - main->program.signal_check = 0; - } - - return F_false; - } -#endif // !defined(_di_fake_signal_check_) && defined(_di_thread_support_) - -#if !defined(_di_fake_signal_check_) && !defined(_di_thread_support_) - f_status_t fake_signal_check(fake_main_t * const main) { - - if (!main) return F_false; - - if (main->program.signal_received) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - return F_false; - } -#endif // !defined(_di_fake_signal_check_) && !defined(_di_thread_support_) - #if !defined(_di_fake_signal_handler_) && !defined(_di_thread_support_) void fake_signal_handler(fake_main_t * const main) { @@ -75,7 +40,7 @@ extern "C" { ? ((fake_local_t *) state->custom)->main : (fake_main_t *) state->custom; - state->status = (fake_signal_check(main) == F_true) ? F_status_set_error(F_interrupt) : F_interrupt_not; + state->status = (macro_fake_signal_check(&main->program, &main->setting.state) == F_true) ? F_status_set_error(F_interrupt) : F_interrupt_not; } #endif // _di_fake_signal_handler_callback_ diff --git a/level_3/fake/c/main/signal.h b/level_3/fake/c/main/signal.h index b349e9c..cb9f987 100644 --- a/level_3/fake/c/main/signal.h +++ b/level_3/fake/c/main/signal.h @@ -17,38 +17,6 @@ extern "C" { #endif /** - * Check to see if a signal is received. - * - * If main.signal is non-zero, then this handles the following signals: - * - F_signal_abort - * - F_signal_broken_pipe - * - F_signal_hangup - * - F_signal_interrupt - * - F_signal_quit - * - F_signal_termination - * - * There is a threaded and a non-threaded version of this. - * The non-threaded version checks periodically using fake_signal_check_d and updates main->signal_check as needed. - * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received. - * - * @param main - * The main program and settings data. - * - * This does not alter main.setting.state.status. - * - * @return - * F_true on signal received. - * F_false otherwise. - * - * @see fake_signal_handler() - * - * @see fll_program_standard_signal_received() - */ -#ifndef _di_fake_signal_check_ - extern f_status_t fake_signal_check(fake_main_t * const main); -#endif // _di_fake_signal_check_ - -/** * Signal handler for signals/interrupts. * * This blocks until an expected signal is recieved. diff --git a/level_3/firewall/c/main/common.c b/level_3/firewall/c/main/common.c index a1adf47..442c386 100644 --- a/level_3/firewall/c/main/common.c +++ b/level_3/firewall/c/main/common.c @@ -127,7 +127,7 @@ extern "C" { for (f_number_unsigned_t i = 0; i < parameters->remaining.used; ++i) { - if (firewall_signal_check(main)) return; + if (macro_firewall_signal_check(&main->program, &main->setting.state)) return; index = parameters->remaining.array[i]; diff --git a/level_3/firewall/c/main/common/define.h b/level_3/firewall/c/main/common/define.h index 3d87704..7cc6dd1 100644 --- a/level_3/firewall/c/main/common/define.h +++ b/level_3/firewall/c/main/common/define.h @@ -108,18 +108,23 @@ extern "C" { * The program signal defines. * * firewall_signal_*_d: - * - check: Number of iterations before performing signal check in non-threaded signal handling. * - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe). - * - check_tiny: The tiny check. - * - check_short: The short signal check. */ #ifndef _di_firewall_signal_d_ - #define firewall_signal_check_d 500000 #define firewall_signal_check_failsafe_d 20000 - #define firewall_signal_check_tiny_d 4 - #define firewall_signal_check_short_d 16 #endif // _di_firewall_signal_d_ +/** + * A macro wrapping the appropriate signal check function based on threaded/non-threaded support. + */ +#ifndef _di_firewall_signal_check_d_ + #ifdef _di_thread_support_ + #define macro_firewall_signal_check(program, state) fll_program_signal_check_loop(program, state) + #else + #define macro_firewall_signal_check(program, state) fll_program_signal_check_simple(program, state) + #endif // _di_thread_support_ +#endif // _di_firewall_signal_check_d_ + #ifdef __cplusplus } // extern "C" #endif diff --git a/level_3/firewall/c/main/main.c b/level_3/firewall/c/main/main.c index 8c99d86..9f2428d 100644 --- a/level_3/firewall/c/main/main.c +++ b/level_3/firewall/c/main/main.c @@ -57,7 +57,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { firewall_setting_load(arguments, &data); } - if (!firewall_signal_check(&data)) { + if (!macro_firewall_signal_check(&data.program, &data.setting.state)) { firewall_main(&data); } diff --git a/level_3/firewall/c/main/operate.c b/level_3/firewall/c/main/operate.c index 1779159..0e4e32d 100644 --- a/level_3/firewall/c/main/operate.c +++ b/level_3/firewall/c/main/operate.c @@ -38,7 +38,7 @@ extern "C" { // Remove "lo" (loopback) from the device listing. for (; i < main->setting.devices.used; ++i) { - if (firewall_signal_check(main)) return; + if (macro_firewall_signal_check(&main->program, &main->setting.state)) return; if (f_compare_dynamic(firewall_device_loop_s, main->setting.devices.array[i]) == F_equal_to) { main->data.file = main->setting.devices.array[i]; @@ -69,7 +69,7 @@ extern "C" { for (i = 0; i < main->data.chain_objects.used; ++i) { - if (firewall_signal_check(main)) return; + if (macro_firewall_signal_check(&main->program, &main->setting.state)) return; if (!(main->data.has & firewall_data_has_stop_e) && f_compare_dynamic_partial_string(firewall_group_stop_s.string, main->data.buffer, firewall_group_stop_s.used, main->data.chain_objects.array[i]) == F_equal_to) { main->data.stop = i; @@ -167,7 +167,7 @@ extern "C" { for (f_number_unsigned_t j = 0; j < main->setting.devices.used; ++j) { - if (firewall_signal_check(main)) return; + if (macro_firewall_signal_check(&main->program, &main->setting.state)) return; main->cache.path_file.used = 0; main->data.device = j; diff --git a/level_3/firewall/c/main/operate/create.c b/level_3/firewall/c/main/operate/create.c index 3484f0f..5cb570c 100644 --- a/level_3/firewall/c/main/operate/create.c +++ b/level_3/firewall/c/main/operate/create.c @@ -61,7 +61,7 @@ extern "C" { for (; i < main->data.chain_objects.used; ++i) { - if (firewall_signal_check(main)) return; + if (macro_firewall_signal_check(&main->program, &main->setting.state)) return; new_chain = F_true; j = 0; @@ -189,7 +189,7 @@ extern "C" { return; } - if (firewall_signal_check(main)) return; + if (macro_firewall_signal_check(&main->program, &main->setting.state)) return; if (return_code && F_status_is_error_not(main->setting.state.status)) { firewall_print_error_operation_return_code(&main->program.error, tools[t], main->cache.arguments, return_code); diff --git a/level_3/firewall/c/main/operate/default.c b/level_3/firewall/c/main/operate/default.c index 2ed071e..f256e6b 100644 --- a/level_3/firewall/c/main/operate/default.c +++ b/level_3/firewall/c/main/operate/default.c @@ -30,7 +30,7 @@ extern "C" { for (t = 0; t < 2; ++t) { - if (firewall_signal_check(main)) return; + if (macro_firewall_signal_check(&main->program, &main->setting.state)) return; if (!tools[t].used) continue; @@ -46,7 +46,7 @@ extern "C" { return; } - if (firewall_signal_check(main)) return; + if (macro_firewall_signal_check(&main->program, &main->setting.state)) return; if (F_status_is_error(main->setting.state.status)) { if (F_status_set_fine(main->setting.state.status) == F_failure) { diff --git a/level_3/firewall/c/main/operate/delete.c b/level_3/firewall/c/main/operate/delete.c index a915ffd..d20c29e 100644 --- a/level_3/firewall/c/main/operate/delete.c +++ b/level_3/firewall/c/main/operate/delete.c @@ -29,7 +29,7 @@ extern "C" { for (t = 0; t < 2; ++t) { - if (firewall_signal_check(main)) return; + if (macro_firewall_signal_check(&main->program, &main->setting.state)) return; if (!tools[t].used) continue; diff --git a/level_3/firewall/c/main/operate/process.c b/level_3/firewall/c/main/operate/process.c index 68042dc..c1ec53a 100644 --- a/level_3/firewall/c/main/operate/process.c +++ b/level_3/firewall/c/main/operate/process.c @@ -44,7 +44,7 @@ extern "C" { for (; i < rule_objects->used; ++i) { - if (firewall_signal_check(main)) return; + if (macro_firewall_signal_check(&main->program, &main->setting.state)) return; valid = F_true; is_ip_list = F_false; @@ -251,7 +251,7 @@ extern "C" { for (t = 0; t < 2; ++t) { - if (firewall_signal_check(main)) return; + if (macro_firewall_signal_check(&main->program, &main->setting.state)) return; if (!tools[t].used) continue; @@ -410,7 +410,7 @@ extern "C" { for (; at < rule_contents->array[i].used; ++at) { - if (firewall_signal_check(main)) return; + if (macro_firewall_signal_check(&main->program, &main->setting.state)) return; if (rule_contents->array[i].array[at].start <= rule_contents->array[i].array[at].stop) { main->cache.arguments.array[main->cache.arguments.used].used = 0; @@ -523,7 +523,7 @@ extern "C" { // The ip_list file contains objects and no content, all objects are what matter an nothing else. for (at = 0; at < main->cache.basic_objects.used; ++at) { - if (firewall_signal_check(main)) return; + if (macro_firewall_signal_check(&main->program, &main->setting.state)) return; main->cache.arguments.array[main->cache.arguments.used].used = 0; diff --git a/level_3/firewall/c/main/signal.c b/level_3/firewall/c/main/signal.c index 6fd7cd3..3c16dab 100644 --- a/level_3/firewall/c/main/signal.c +++ b/level_3/firewall/c/main/signal.c @@ -4,41 +4,6 @@ extern "C" { #endif -#if !defined(_di_firewall_signal_check_) && defined(_di_thread_support_) - f_status_t firewall_signal_check(firewall_main_t * const main) { - - if (!main) return F_false; - if (main->program.signal_received) return F_true; - - if (!((++main->program.signal_check) % firewall_signal_check_d)) { - if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - main->program.signal_check = 0; - } - - return F_false; - } -#endif // !defined(_di_firewall_signal_check_) && defined(_di_thread_support_) - -#if !defined(_di_firewall_signal_check_) && !defined(_di_thread_support_) - f_status_t firewall_signal_check(firewall_main_t * const main) { - - if (!main) return F_false; - - if (main->program.signal_received) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - return F_false; - } -#endif // !defined(_di_firewall_signal_check_) && !defined(_di_thread_support_) - #if !defined(_di_firewall_signal_handler_) && !defined(_di_thread_support_) void firewall_signal_handler(firewall_main_t * const main) { diff --git a/level_3/firewall/c/main/signal.h b/level_3/firewall/c/main/signal.h index e078f10..726d39a 100644 --- a/level_3/firewall/c/main/signal.h +++ b/level_3/firewall/c/main/signal.h @@ -17,38 +17,6 @@ extern "C" { #endif /** - * Check to see if a signal is received. - * - * If main.signal is non-zero, then this handles the following signals: - * - F_signal_abort - * - F_signal_broken_pipe - * - F_signal_hangup - * - F_signal_interrupt - * - F_signal_quit - * - F_signal_termination - * - * There is a threaded and a non-threaded version of this. - * The non-threaded version checks periodically using firewall_signal_check_d and updates main->signal_check as needed. - * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received. - * - * @param main - * The main program and settings data. - * - * This does not alter main.setting.state.status. - * - * @return - * F_true on signal received. - * F_false otherwise. - * - * @see firewall_signal_handler() - * - * @see fll_program_standard_signal_received() - */ -#ifndef _di_firewall_signal_check_ - extern f_status_t firewall_signal_check(firewall_main_t * const main); -#endif // _di_firewall_signal_check_ - -/** * Signal handler for signals/interrupts. * * This blocks until an expected signal is recieved. diff --git a/level_3/fss_identify/c/main/common.c b/level_3/fss_identify/c/main/common.c index 0dd0f8f..2cda242 100644 --- a/level_3/fss_identify/c/main/common.c +++ b/level_3/fss_identify/c/main/common.c @@ -128,7 +128,7 @@ extern "C" { for (; i < main->setting.names.used; ++i) { - if (fss_identify_signal_check(main)) return; + if (macro_fss_identify_signal_check(&main->program, &main->setting.state)) return; index = parameters->array[fss_identify_parameter_name_e].values.array[i]; main->setting.names.array[i].used = 0; @@ -144,7 +144,7 @@ extern "C" { if (main->setting.names.array[i].used) { for (j = 0; j < main->setting.names.array[i].used; ++j) { - if (fss_identify_signal_check(main)) return; + if (macro_fss_identify_signal_check(&main->program, &main->setting.state)) return; main->setting.state.status = f_utf_is_word_dash(main->setting.names.array[i].string + j, main->setting.names.array[i].used, F_true); @@ -211,7 +211,7 @@ extern "C" { // Construct the array without allocating any more memory by setting this as a static string (used > 0, size = 0). for (index = 0; main->setting.files.used < parameters->remaining.used; ) { - if (fss_identify_signal_check(main)) return; + if (macro_fss_identify_signal_check(&main->program, &main->setting.state)) return; index = parameters->remaining.array[main->setting.files.used]; diff --git a/level_3/fss_identify/c/main/common/define.h b/level_3/fss_identify/c/main/common/define.h index 54bf538..26c42cf 100644 --- a/level_3/fss_identify/c/main/common/define.h +++ b/level_3/fss_identify/c/main/common/define.h @@ -96,18 +96,23 @@ extern "C" { * The program signal defines. * * fss_identify_signal_*_d: - * - check: Number of iterations before performing signal check in non-threaded signal handling. * - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe). - * - check_tiny: The tiny check. - * - check_short: The short signal check. */ #ifndef _di_fss_identify_signal_d_ - #define fss_identify_signal_check_d 500000 #define fss_identify_signal_check_failsafe_d 20000 - #define fss_identify_signal_check_tiny_d 4 - #define fss_identify_signal_check_short_d 16 #endif // _di_fss_identify_signal_d_ +/** + * A macro wrapping the appropriate signal check function based on threaded/non-threaded support. + */ +#ifndef _di_fss_identify_signal_check_d_ + #ifdef _di_thread_support_ + #define macro_fss_identify_signal_check(program, state) fll_program_signal_check_loop(program, state) + #else + #define macro_fss_identify_signal_check(program, state) fll_program_signal_check_simple(program, state) + #endif // _di_thread_support_ +#endif // _di_fss_identify_signal_check_d_ + #ifdef __cplusplus } // extern "C" #endif diff --git a/level_3/fss_identify/c/main/fss_identify.c b/level_3/fss_identify/c/main/fss_identify.c index c1a14da..7e1e5ea 100644 --- a/level_3/fss_identify/c/main/fss_identify.c +++ b/level_3/fss_identify/c/main/fss_identify.c @@ -43,7 +43,7 @@ extern "C" { for (f_number_unsigned_t i = 0; F_status_is_error_not(main->setting.state.status) && i < main->setting.files.used; ++i) { - if (fss_identify_signal_check(main)) break; + if (macro_fss_identify_signal_check(&main->program, &main->setting.state)) break; if ((main->setting.flag & fss_identify_main_flag_line_d) && main->setting.current > main->setting.line) break; macro_f_file_t_reset(main->setting.file); diff --git a/level_3/fss_identify/c/main/load.c b/level_3/fss_identify/c/main/load.c index 1805e94..99f2c13 100644 --- a/level_3/fss_identify/c/main/load.c +++ b/level_3/fss_identify/c/main/load.c @@ -15,7 +15,7 @@ extern "C" { main->setting.range.stop = 0; do { - if (fss_identify_signal_check(main)) return; + if (macro_fss_identify_signal_check(&main->program, &main->setting.state)) return; main->setting.state.status = f_memory_array_increase_by(main->setting.file.size_read, sizeof(f_char_t), (void **) &main->setting.buffer.string, &main->setting.buffer.used, &main->setting.buffer.size); diff --git a/level_3/fss_identify/c/main/main.c b/level_3/fss_identify/c/main/main.c index fd3a5b5..9dd317c 100644 --- a/level_3/fss_identify/c/main/main.c +++ b/level_3/fss_identify/c/main/main.c @@ -55,7 +55,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { fss_identify_setting_load(arguments, &data); } - if (!fss_identify_signal_check(&data)) { + if (!macro_fss_identify_signal_check(&data.program, &data.setting.state)) { fss_identify_main(&data); } diff --git a/level_3/fss_identify/c/main/signal.c b/level_3/fss_identify/c/main/signal.c index c548b79..30b0219 100644 --- a/level_3/fss_identify/c/main/signal.c +++ b/level_3/fss_identify/c/main/signal.c @@ -4,41 +4,6 @@ extern "C" { #endif -#if !defined(_di_fss_identify_signal_check_) && defined(_di_thread_support_) - f_status_t fss_identify_signal_check(fss_identify_main_t * const main) { - - if (!main) return F_false; - if (main->program.signal_received) return F_true; - - if (!((++main->program.signal_check) % fss_identify_signal_check_d)) { - if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - main->program.signal_check = 0; - } - - return F_false; - } -#endif // !defined(_di_fss_identify_signal_check_) && defined(_di_thread_support_) - -#if !defined(_di_fss_identify_signal_check_) && !defined(_di_thread_support_) - f_status_t fss_identify_signal_check(fss_identify_main_t * const main) { - - if (!main) return F_false; - - if (main->program.signal_received) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - return F_false; - } -#endif // !defined(_di_fss_identify_signal_check_) && !defined(_di_thread_support_) - #if !defined(_di_fss_identify_signal_handler_) && !defined(_di_thread_support_) void fss_identify_signal_handler(fss_identify_main_t * const main) { diff --git a/level_3/fss_identify/c/main/signal.h b/level_3/fss_identify/c/main/signal.h index 0aeba76..eafb74d 100644 --- a/level_3/fss_identify/c/main/signal.h +++ b/level_3/fss_identify/c/main/signal.h @@ -17,38 +17,6 @@ extern "C" { #endif /** - * Check to see if a signal is received. - * - * If main.signal is non-zero, then this handles the following signals: - * - F_signal_abort - * - F_signal_broken_pipe - * - F_signal_hangup - * - F_signal_interrupt - * - F_signal_quit - * - F_signal_termination - * - * There is a threaded and a non-threaded version of this. - * The non-threaded version checks periodically using fss_identify_signal_check_d and updates main->signal_check as needed. - * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received. - * - * @param main - * The main program and settings data. - * - * This does not alter main.setting.state.status. - * - * @return - * F_true on signal received. - * F_false otherwise. - * - * @see fss_identify_signal_handler() - * - * @see fll_program_standard_signal_received() - */ -#ifndef _di_fss_identify_signal_check_ - extern f_status_t fss_identify_signal_check(fss_identify_main_t * const main); -#endif // _di_fss_identify_signal_check_ - -/** * Signal handler for signals/interrupts. * * This blocks until an expected signal is recieved. diff --git a/level_3/fss_read/c/basic/main.c b/level_3/fss_read/c/basic/main.c index 3627fff..24e5ffc 100644 --- a/level_3/fss_read/c/basic/main.c +++ b/level_3/fss_read/c/basic/main.c @@ -85,7 +85,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { fss_read_setting_load(arguments, &data, 0); } - if (!fss_read_signal_check(&data)) { + if (!macro_fss_read_signal_check(&data.program, &data.setting.state)) { fss_read_main(&data); } diff --git a/level_3/fss_read/c/basic_list/main.c b/level_3/fss_read/c/basic_list/main.c index 38f3ccf..b317128 100644 --- a/level_3/fss_read/c/basic_list/main.c +++ b/level_3/fss_read/c/basic_list/main.c @@ -84,7 +84,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { fss_read_setting_load(arguments, &data, 0); } - if (!fss_read_signal_check(&data)) { + if (!macro_fss_read_signal_check(&data.program, &data.setting.state)) { fss_read_main(&data); } diff --git a/level_3/fss_read/c/embedded_list/main.c b/level_3/fss_read/c/embedded_list/main.c index 2c309e5..88673f4 100644 --- a/level_3/fss_read/c/embedded_list/main.c +++ b/level_3/fss_read/c/embedded_list/main.c @@ -85,7 +85,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { fss_read_setting_load(arguments, &data, 0); } - if (!fss_read_signal_check(&data)) { + if (!macro_fss_read_signal_check(&data.program, &data.setting.state)) { fss_read_main(&data); } diff --git a/level_3/fss_read/c/embedded_list/process.c b/level_3/fss_read/c/embedded_list/process.c index 7f2e512..455412f 100644 --- a/level_3/fss_read/c/embedded_list/process.c +++ b/level_3/fss_read/c/embedded_list/process.c @@ -88,7 +88,7 @@ extern "C" { for (; i < main->setting.contents.used && main->setting.state.status != F_success; ++i) { if (!names[i]) continue; - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; main->call.process_at_line(main, i, *delimits_object, *delimits_content, &line); if (F_status_is_error(main->setting.state.status)) return; @@ -99,7 +99,7 @@ extern "C" { for (; i < main->setting.contents.used; ++i) { if (!names[i]) continue; - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; main->call.print_at(&main->program.output, i, *delimits_object, *delimits_content); } // for diff --git a/level_3/fss_read/c/embedded_list/process.h b/level_3/fss_read/c/embedded_list/process.h index 8fa9245..2ba9fe5 100644 --- a/level_3/fss_read/c/embedded_list/process.h +++ b/level_3/fss_read/c/embedded_list/process.h @@ -27,9 +27,9 @@ extern "C" { * This alters main.setting.state.status: * F_okay on success. * - * Errors (with error bit) from: fss_read_signal_check(). + * Errors (with error bit) from: macro_fss_read_signal_check(). * - * @see fss_read_signal_check() + * @see macro_fss_read_signal_check() */ #ifndef _di_fss_read_embedded_list_process_ extern void fss_read_embedded_list_process(fss_read_main_t * const main); @@ -46,9 +46,9 @@ extern "C" { * This alters main.setting.state.status: * F_okay on success. * - * Errors (with error bit) from: fss_read_signal_check(). + * Errors (with error bit) from: macro_fss_read_signal_check(). * - * @see fss_read_signal_check() + * @see macro_fss_read_signal_check() */ #ifndef _di_fss_read_embedded_list_process_determine_depth_ extern void fss_read_embedded_list_process_determine_depth(fss_read_main_t * const main); @@ -67,7 +67,7 @@ extern "C" { * This alters main.setting.state.status: * F_okay on success. * - * Errors (with error bit) from: fss_read_signal_check(). + * Errors (with error bit) from: macro_fss_read_signal_check(). * @param parent * The index position of the parent element. * This is needed because the items array for some depth is tied to the parent via a property. @@ -76,7 +76,7 @@ extern "C" { * * Must be greater than 0. * - * @see fss_read_signal_check() + * @see macro_fss_read_signal_check() */ #ifndef _di_fss_read_embedded_list_process_determine_depth_nest_recurse_ extern void fss_read_embedded_list_process_determine_depth_nest_recurse(fss_read_main_t * const main, const f_number_unsigned_t parent, const f_number_unsigned_t next); diff --git a/level_3/fss_read/c/extended/main.c b/level_3/fss_read/c/extended/main.c index b2d9fb9..8d2c102 100644 --- a/level_3/fss_read/c/extended/main.c +++ b/level_3/fss_read/c/extended/main.c @@ -85,7 +85,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { fss_read_setting_load(arguments, &data, 0); } - if (!fss_read_signal_check(&data)) { + if (!macro_fss_read_signal_check(&data.program, &data.setting.state)) { fss_read_main(&data); } diff --git a/level_3/fss_read/c/extended_list/main.c b/level_3/fss_read/c/extended_list/main.c index 96772c5..8545d88 100644 --- a/level_3/fss_read/c/extended_list/main.c +++ b/level_3/fss_read/c/extended_list/main.c @@ -84,7 +84,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { fss_read_setting_load(arguments, &data, 0); } - if (!fss_read_signal_check(&data)) { + if (!macro_fss_read_signal_check(&data.program, &data.setting.state)) { fss_read_main(&data); } diff --git a/level_3/fss_read/c/main/common.c b/level_3/fss_read/c/main/common.c index 3552a9c..d0ba535 100644 --- a/level_3/fss_read/c/main/common.c +++ b/level_3/fss_read/c/main/common.c @@ -261,7 +261,7 @@ extern "C" { for (i = 0; i < parameters->array[fss_read_parameter_delimit_e].values.used; ++i) { - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; index = parameters->array[fss_read_parameter_delimit_e].values.array[i]; length = parameters->arguments.array[index].used; @@ -451,7 +451,7 @@ extern "C" { while (main->setting.state.status != F_okay_eof) { - if (fss_read_signal_check(main)) break; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) break; main->setting.state.status = f_file_stream_read_block(file, &main->setting.buffer); if (F_status_is_error(main->setting.state.status)) break; @@ -487,7 +487,7 @@ extern "C" { for (i = 0; i < parameters->remaining.used; ++i) { - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; index = parameters->remaining.array[i]; file_data = &main->setting.files.array[main->setting.files.used]; @@ -538,7 +538,7 @@ extern "C" { for (size_read = 0; size_read < size_file; size_read += size_block) { - if (size_file > fss_read_allocation_block_max_d && fss_read_signal_check(main)) break; + if (size_file > fss_read_allocation_block_max_d && macro_fss_read_signal_check(&main->program, &main->setting.state)) break; main->setting.state.status = f_file_stream_read_until(file, size_block, &main->setting.buffer); if (F_status_is_error(main->setting.state.status)) break; @@ -606,7 +606,7 @@ extern "C" { for (i = 0; i < main->setting.depths.used; ++i) { - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; current = &main->setting.depths.array[i]; current->depth = 0; @@ -688,7 +688,7 @@ extern "C" { for (j = i + 1; j < main->setting.depths.used; ++j) { - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; current = &main->setting.depths.array[i]; diff --git a/level_3/fss_read/c/main/common.h b/level_3/fss_read/c/main/common.h index e462ead..9775358 100644 --- a/level_3/fss_read/c/main/common.h +++ b/level_3/fss_read/c/main/common.h @@ -64,7 +64,7 @@ extern "C" { * Errors (with error bit) from: fll_program_parameter_process_verbosity_standard(). * * Errors (with error bit) from: fss_read_setting_load_depth(). - * Errors (with error bit) from: fss_read_signal_check() + * Errors (with error bit) from: macro_fss_read_signal_check() * @param do_settings_load * (optional) Designate a function to call after performing the initial processing, but before printing help. * If the function returns F_done, then this function immediately returns, resetting status to F_okay. @@ -77,7 +77,7 @@ extern "C" { * @see fll_program_parameter_process_verbosity_standard() * * @see fss_read_setting_load_depth() - * @see fss_read_signal_check() + * @see macro_fss_read_signal_check() */ #ifndef _di_fss_read_setting_load_ extern void fss_read_setting_load(const f_console_arguments_t arguments, fss_read_main_t * const main, const fss_read_settings_load_call_t do_settings_load); diff --git a/level_3/fss_read/c/main/common/define.h b/level_3/fss_read/c/main/common/define.h index 37138ab..0dfd978 100644 --- a/level_3/fss_read/c/main/common/define.h +++ b/level_3/fss_read/c/main/common/define.h @@ -161,18 +161,23 @@ extern "C" { * The program signal defines. * * fss_read_signal_*_d: - * - check: Number of iterations before performing signal check in non-threaded signal handling. * - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe). - * - check_tiny: The tiny check. - * - check_short: The short signal check. */ #ifndef _di_fss_read_signal_d_ - #define fss_read_signal_check_d 500000 #define fss_read_signal_check_failsafe_d 20000 - #define fss_read_signal_check_tiny_d 4 - #define fss_read_signal_check_short_d 16 #endif // _di_fss_read_signal_d_ +/** + * A macro wrapping the appropriate signal check function based on threaded/non-threaded support. + */ +#ifndef _di_fss_read_signal_check_d_ + #ifdef _di_thread_support_ + #define macro_fss_read_signal_check(program, state) fll_program_signal_check_loop(program, state) + #else + #define macro_fss_read_signal_check(program, state) fll_program_signal_check_simple(program, state) + #endif // _di_thread_support_ +#endif // _di_fss_read_signal_check_d_ + #ifdef __cplusplus } // extern "C" #endif diff --git a/level_3/fss_read/c/main/fss_read.h b/level_3/fss_read/c/main/fss_read.h index e03c6f9..378a407 100644 --- a/level_3/fss_read/c/main/fss_read.h +++ b/level_3/fss_read/c/main/fss_read.h @@ -166,11 +166,11 @@ extern "C" { * * Errors (with error bit) from: f_string_dynamic_append_assure(). * - * Errors (with error bit) from: fss_read_signal_check(). + * Errors (with error bit) from: macro_fss_read_signal_check(). * * @see f_string_dynamic_append_assure() * - * @see fss_read_signal_check() + * @see macro_fss_read_signal_check() */ #ifndef _di_fss_read_process_last_line_ extern void fss_read_process_last_line(fss_read_main_t * const main); diff --git a/level_3/fss_read/c/main/main.c b/level_3/fss_read/c/main/main.c index ce31ce3..b2da409 100644 --- a/level_3/fss_read/c/main/main.c +++ b/level_3/fss_read/c/main/main.c @@ -66,7 +66,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { fss_read_setting_load(arguments, &data, &fss_read_main_setting_load_as); } - if (!fss_read_signal_check(&data)) { + if (!macro_fss_read_signal_check(&data.program, &data.setting.state)) { fss_read_main(&data); } diff --git a/level_3/fss_read/c/main/print/data.c b/level_3/fss_read/c/main/print/data.c index acfc6dd..a64c1d1 100644 --- a/level_3/fss_read/c/main/print/data.c +++ b/level_3/fss_read/c/main/print/data.c @@ -73,7 +73,7 @@ extern "C" { // Loop through with conditionals only when necessary for performance reasons. for (print_state |= 0x8; i < main->setting.contents.array[at].used; ++i) { - if (fss_read_signal_check(main)) return F_status_set_error(F_interrupt); + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return F_status_set_error(F_interrupt); if (main->setting.contents.array[at].array[i].start <= main->setting.contents.array[at].array[i].stop) { print_state &= ~0x8; @@ -111,7 +111,7 @@ extern "C" { for (; i < main->setting.contents.array[at].used; ++i) { - if (fss_read_signal_check(main)) return F_status_set_error(F_interrupt); + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return F_status_set_error(F_interrupt); if (main->setting.contents.array[at].array[i].start > main->setting.contents.array[at].array[i].stop) continue; if (main->call.print_content_next) { diff --git a/level_3/fss_read/c/main/process.c b/level_3/fss_read/c/main/process.c index 0b1d55c..f3fb6ff 100644 --- a/level_3/fss_read/c/main/process.c +++ b/level_3/fss_read/c/main/process.c @@ -86,7 +86,7 @@ extern "C" { for (; i < main->setting.contents.used && main->setting.state.status != F_success; ++i) { if (!names[i]) continue; - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; main->call.process_at_line(main, i, *delimits_object, *delimits_content, &line); if (F_status_is_error(main->setting.state.status)) return; @@ -97,7 +97,7 @@ extern "C" { for (; i < main->setting.contents.used; ++i) { if (!names[i]) continue; - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; main->call.print_at(&main->program.output, i, *delimits_object, *delimits_content); } // for @@ -140,7 +140,7 @@ extern "C" { for (; i < main->setting.objects.used; ++i) { if (!names[i]) continue; - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; if (at == main->setting.depth.value_at) { if (main->setting.flag & fss_read_main_flag_line_d) { @@ -332,14 +332,14 @@ extern "C" { for (; i < main->setting.contents.array[at].used; ++i) { - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; main->setting.range = main->setting.contents.array[at].array[i]; k = 0; for (j = main->setting.range.start; j <= main->setting.range.stop; ++j) { - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; if (k < main->setting.comments.used) { while (k < main->setting.comments.used && main->setting.comments.array[k].stop < j) ++k; @@ -421,7 +421,7 @@ extern "C" { for (f_number_unsigned_t at = 0; at < main->setting.contents.used; ++at) { if (!names[at]) continue; - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; if (main->setting.flag & fss_read_main_flag_empty_d) { if (main->setting.contents.array[at].used > max) { @@ -433,7 +433,7 @@ extern "C" { for (i = 0; i < main->setting.contents.array[at].used; ++i) { - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; if (main->setting.contents.array[at].array[i].start <= main->setting.contents.array[at].array[i].stop) ++current; } // for @@ -464,7 +464,7 @@ extern "C" { } } - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; } // for } @@ -487,7 +487,7 @@ extern "C" { if ((main->setting.flag & fss_read_main_flag_trim_d) || (main->setting.feature & fss_read_feature_flag_object_trim_d)) { for (i = 0; i < main->setting.objects.used; ++i) { - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; if (f_compare_dynamic_partial_except_trim_dynamic(main->setting.depth.value_name, main->setting.buffer, main->setting.objects.array[i], fss_read_except_none_c, main->setting.delimits_object) == F_equal_to) { names[i] = F_true; @@ -497,7 +497,7 @@ extern "C" { else { for (i = 0; i < main->setting.objects.used; ++i) { - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; if (f_compare_dynamic_partial_except_dynamic(main->setting.depth.value_name, main->setting.buffer, main->setting.objects.array[i], fss_read_except_none_c, main->setting.delimits_object) == F_equal_to) { names[i] = F_true; @@ -525,7 +525,7 @@ extern "C" { for (; i < main->setting.contents.used; ++i) { if (!names[i]) continue; - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; if ((main->setting.flag & fss_read_main_flag_at_d) && main->setting.depth.index_at) { if (main->setting.depth.value_at != i) continue; @@ -547,7 +547,7 @@ extern "C" { for (f_number_unsigned_t at = 0; i < main->setting.objects.used; ++i) { if (!names[i]) continue; - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; if (at < main->setting.depth.value_at) { ++at; @@ -568,7 +568,7 @@ extern "C" { for (; i < main->setting.objects.used; ++i) { if (!names[i]) continue; - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; if (!(main->setting.flag & fss_read_main_flag_object_d) && (main->setting.flag & fss_read_main_flag_content_d)) { if (!(main->setting.contents.array[i].used || (main->setting.flag & fss_read_main_flag_empty_d))) continue; @@ -607,7 +607,7 @@ extern "C" { for (; at < main->setting.contents.used; ++at) { if (!names[at]) continue; - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; if ((main->setting.flag & fss_read_main_flag_at_d) && main->setting.depth.index_at) { if (main->setting.depth.value_at != at) continue; @@ -630,7 +630,7 @@ extern "C" { for (i = 0; i < main->setting.contents.array[at].used; ++i) { - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; range.start = main->setting.contents.array[at].array[i].start; range.stop = main->setting.contents.array[at].array[i].stop; @@ -673,7 +673,7 @@ extern "C" { for (; at < main->setting.objects.used; ++at) { if (!names[at]) continue; - if (fss_read_signal_check(main)) return; + if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return; if ((main->setting.flag & fss_read_main_flag_at_d) && main->setting.depth.index_at) { if (main->setting.depth.value_at != at) continue; diff --git a/level_3/fss_read/c/main/process.h b/level_3/fss_read/c/main/process.h index c027a99..9960cc3 100644 --- a/level_3/fss_read/c/main/process.h +++ b/level_3/fss_read/c/main/process.h @@ -36,9 +36,9 @@ extern "C" { * Errors (with error bit) from: main.call.process_read(). * Errors (with error bit) from: main.call.process_total(). * - * Errors (with error bit) from: fss_read_signal_check(). + * Errors (with error bit) from: macro_fss_read_signal_check(). * - * @see fss_read_signal_check() + * @see macro_fss_read_signal_check() */ #ifndef _di_fss_read_process_ extern void fss_read_process(fss_read_main_t * const main); @@ -57,7 +57,7 @@ extern "C" { * This alters main.setting.state.status: * F_okay on success. * - * Errors (with error bit) from: fss_read_signal_check(). + * Errors (with error bit) from: macro_fss_read_signal_check(). * @param names * An array of booleans representing if the name at a given index is enabled. * (If TRUE, then the name is to be used and if FALSE, then the name is not to be used.) @@ -68,7 +68,7 @@ extern "C" { * The delimits array representing a delimited Content. * This represents the positions within the current Content at the "at" position. * - * @see fss_read_signal_check() + * @see macro_fss_read_signal_check() */ #ifndef _di_fss_read_process_at_ extern void fss_read_process_at(fss_read_main_t * const main, const bool names[], const f_number_unsigneds_t delimits_object, const f_number_unsigneds_t delimits_content); @@ -90,7 +90,7 @@ extern "C" { * * Errors (with error bit) from: f_string_dynamic_append_assure(). * - * Errors (with error bit) from: fss_read_signal_check(). + * Errors (with error bit) from: macro_fss_read_signal_check(). * @param at * The Object index position to be processed. * @param delimits_object @@ -120,12 +120,12 @@ extern "C" { * This alters main.setting.state.status: * F_okay on success. * - * Errors (with error bit) from: fss_read_signal_check(). + * Errors (with error bit) from: macro_fss_read_signal_check(). * @param names * An array of booleans representing if the name at a given index is enabled. * (If TRUE, then the name is to be used and if FALSE, then the name is not to be used.) * - * @see fss_read_signal_check() + * @see macro_fss_read_signal_check() */ #ifndef _di_fss_read_process_columns_ extern void fss_read_process_columns(fss_read_main_t * const main, const bool names[]); @@ -142,12 +142,12 @@ extern "C" { * This alters main.setting.state.status: * F_okay on success. * - * Errors (with error bit) from: fss_read_signal_check(). + * Errors (with error bit) from: macro_fss_read_signal_check(). * @param names * An array of booleans representing if the name at a given index is enabled. * (If TRUE, then the name is to be used and if FALSE, then the name is not to be used.) * - * @see fss_read_signal_check() + * @see macro_fss_read_signal_check() */ #ifndef _di_fss_read_process_name_ extern void fss_read_process_name(fss_read_main_t * const main, bool names[]); @@ -166,12 +166,12 @@ extern "C" { * This alters main.setting.state.status: * F_okay on success. * - * Errors (with error bit) from: fss_read_signal_check(). + * Errors (with error bit) from: macro_fss_read_signal_check(). * @param names * An array of booleans representing if the name at a given index is enabled. * (If TRUE, then the name is to be used and if FALSE, then the name is not to be used.) * - * @see fss_read_signal_check() + * @see macro_fss_read_signal_check() */ #ifndef _di_fss_read_process_total_ extern void fss_read_process_total(fss_read_main_t * const main, const bool names[]); @@ -190,12 +190,12 @@ extern "C" { * This alters main.setting.state.status: * F_okay on success. * - * Errors (with error bit) from: fss_read_signal_check(). + * Errors (with error bit) from: macro_fss_read_signal_check(). * @param names * An array of booleans representing if the name at a given index is enabled. * (If TRUE, then the name is to be used and if FALSE, then the name is not to be used.) * - * @see fss_read_signal_check() + * @see macro_fss_read_signal_check() */ #ifndef _di_fss_read_process_total_multiple_ extern void fss_read_process_total_multiple(fss_read_main_t * const main, const bool names[]); diff --git a/level_3/fss_read/c/main/signal.c b/level_3/fss_read/c/main/signal.c index fbab7c3..bf3e2ae 100644 --- a/level_3/fss_read/c/main/signal.c +++ b/level_3/fss_read/c/main/signal.c @@ -4,41 +4,6 @@ extern "C" { #endif -#if !defined(_di_fss_read_signal_check_) && defined(_di_thread_support_) - f_status_t fss_read_signal_check(fss_read_main_t * const main) { - - if (!main) return F_false; - if (main->program.signal_received) return F_true; - - if (!((++main->program.signal_check) % fss_read_signal_check_d)) { - if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - main->program.signal_check = 0; - } - - return F_false; - } -#endif // !defined(_di_fss_read_signal_check_) && defined(_di_thread_support_) - -#if !defined(_di_fss_read_signal_check_) && !defined(_di_thread_support_) - f_status_t fss_read_signal_check(fss_read_main_t * const main) { - - if (!main) return F_false; - - if (main->program.signal_received) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - return F_false; - } -#endif // !defined(_di_fss_read_signal_check_) && !defined(_di_thread_support_) - #if !defined(_di_fss_read_signal_handler_) && !defined(_di_thread_support_) void fss_read_signal_handler(fss_read_main_t * const main) { diff --git a/level_3/fss_read/c/main/signal.h b/level_3/fss_read/c/main/signal.h index 6925b98..3271d07 100644 --- a/level_3/fss_read/c/main/signal.h +++ b/level_3/fss_read/c/main/signal.h @@ -17,38 +17,6 @@ extern "C" { #endif /** - * Check to see if a signal is received. - * - * If main.signal is non-zero, then this handles the following signals: - * - F_signal_abort - * - F_signal_broken_pipe - * - F_signal_hangup - * - F_signal_interrupt - * - F_signal_quit - * - F_signal_termination - * - * There is a threaded and a non-threaded version of this. - * The non-threaded version checks periodically using fss_read_signal_check_d and updates main->signal_check as needed. - * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received. - * - * @param main - * The main program and settings data. - * - * This does not alter main.setting.state.status. - * - * @return - * F_true on signal received. - * F_false otherwise. - * - * @see fss_read_signal_handler() - * - * @see fll_program_standard_signal_received() - */ -#ifndef _di_fss_read_signal_check_ - extern f_status_t fss_read_signal_check(fss_read_main_t * const main); -#endif // _di_fss_read_signal_check_ - -/** * Signal handler for signals/interrupts. * * This blocks until an expected signal is recieved. diff --git a/level_3/fss_read/c/payload/fss_read.h b/level_3/fss_read/c/payload/fss_read.h index b19f2ea..d85e81f 100644 --- a/level_3/fss_read/c/payload/fss_read.h +++ b/level_3/fss_read/c/payload/fss_read.h @@ -152,7 +152,7 @@ extern "C" { * F_data_not on success but nothing was provided to operate with. * * @see fss_read_setting_load() - * @see fss_read_signal_check() + * @see macro_fss_read_signal_check() */ #ifndef _di_fss_read_payload_setting_load_ extern void fss_read_payload_setting_load(const f_console_arguments_t arguments, fss_read_main_t * const main); diff --git a/level_3/fss_read/c/payload/main.c b/level_3/fss_read/c/payload/main.c index 14dbee6..e193a61 100644 --- a/level_3/fss_read/c/payload/main.c +++ b/level_3/fss_read/c/payload/main.c @@ -86,7 +86,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { fss_read_setting_load(arguments, &data, &fss_read_payload_setting_load); } - if (!fss_read_signal_check(&data)) { + if (!macro_fss_read_signal_check(&data.program, &data.setting.state)) { fss_read_main(&data); } diff --git a/level_3/fss_write/c/basic/main.c b/level_3/fss_write/c/basic/main.c index 1e92e7a..e0a9823 100644 --- a/level_3/fss_write/c/basic/main.c +++ b/level_3/fss_write/c/basic/main.c @@ -66,7 +66,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { fss_write_setting_load(arguments, &data, 0); } - if (!fss_write_signal_check(&data)) { + if (!macro_fss_write_signal_check(&data.program, &data.setting.state)) { fss_write_main(&data); } diff --git a/level_3/fss_write/c/basic_list/main.c b/level_3/fss_write/c/basic_list/main.c index d13bbcb..7cd3a70 100644 --- a/level_3/fss_write/c/basic_list/main.c +++ b/level_3/fss_write/c/basic_list/main.c @@ -66,7 +66,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { fss_write_setting_load(arguments, &data, 0); } - if (!fss_write_signal_check(&data)) { + if (!macro_fss_write_signal_check(&data.program, &data.setting.state)) { fss_write_main(&data); } diff --git a/level_3/fss_write/c/embedded_list/main.c b/level_3/fss_write/c/embedded_list/main.c index dce6350..5c6b3c1 100644 --- a/level_3/fss_write/c/embedded_list/main.c +++ b/level_3/fss_write/c/embedded_list/main.c @@ -69,7 +69,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { fss_write_setting_load(arguments, &data, 0); } - if (!fss_write_signal_check(&data)) { + if (!macro_fss_write_signal_check(&data.program, &data.setting.state)) { fss_write_main(&data); } diff --git a/level_3/fss_write/c/extended/main.c b/level_3/fss_write/c/extended/main.c index 384fc5d..fe1117f 100644 --- a/level_3/fss_write/c/extended/main.c +++ b/level_3/fss_write/c/extended/main.c @@ -68,7 +68,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { fss_write_setting_load(arguments, &data, 0); } - if (!fss_write_signal_check(&data)) { + if (!macro_fss_write_signal_check(&data.program, &data.setting.state)) { fss_write_main(&data); } diff --git a/level_3/fss_write/c/extended_list/main.c b/level_3/fss_write/c/extended_list/main.c index 7207e09..4f91810 100644 --- a/level_3/fss_write/c/extended_list/main.c +++ b/level_3/fss_write/c/extended_list/main.c @@ -68,7 +68,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { fss_write_setting_load(arguments, &data, 0); } - if (!fss_write_signal_check(&data)) { + if (!macro_fss_write_signal_check(&data.program, &data.setting.state)) { fss_write_main(&data); } diff --git a/level_3/fss_write/c/main/common/define.h b/level_3/fss_write/c/main/common/define.h index d5e7ffc..7fa2ce8 100644 --- a/level_3/fss_write/c/main/common/define.h +++ b/level_3/fss_write/c/main/common/define.h @@ -100,18 +100,23 @@ extern "C" { * The program signal defines. * * fss_write_signal_*_d: - * - check: Number of iterations before performing signal check in non-threaded signal handling. * - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe). - * - check_tiny: The tiny check. - * - check_short: The short signal check. */ #ifndef _di_fss_write_signal_d_ - #define fss_write_signal_check_d 500000 #define fss_write_signal_check_failsafe_d 20000 - #define fss_write_signal_check_tiny_d 4 - #define fss_write_signal_check_short_d 16 #endif // _di_fss_write_signal_d_ +/** + * A macro wrapping the appropriate signal check function based on threaded/non-threaded support. + */ +#ifndef _di_fss_write_signal_check_d_ + #ifdef _di_thread_support_ + #define macro_fss_write_signal_check(program, state) fll_program_signal_check_loop(program, state) + #else + #define macro_fss_write_signal_check(program, state) fll_program_signal_check_simple(program, state) + #endif // _di_thread_support_ +#endif // _di_fss_write_signal_check_d_ + #ifdef __cplusplus } // extern "C" #endif diff --git a/level_3/fss_write/c/main/fss_write.c b/level_3/fss_write/c/main/fss_write.c index 9433cfb..2662d16 100644 --- a/level_3/fss_write/c/main/fss_write.c +++ b/level_3/fss_write/c/main/fss_write.c @@ -81,7 +81,7 @@ extern "C" { if (length) { for (f_number_unsigned_t i = 0; i < length; ++i) { - if (fss_write_signal_check(main)) return; + if (macro_fss_write_signal_check(&main->program, &main->setting.state)) return; if (main->setting.objects.used) { main->setting.object = &main->setting.objects.array[i]; @@ -185,7 +185,7 @@ extern "C" { for (;;) { - if (fss_write_signal_check(main)) break; + if (macro_fss_write_signal_check(&main->program, &main->setting.state)) break; if (range.start > range.stop) { if (status_pipe == F_okay_eof) break; diff --git a/level_3/fss_write/c/main/main.c b/level_3/fss_write/c/main/main.c index 2ef7a03..f7a184f 100644 --- a/level_3/fss_write/c/main/main.c +++ b/level_3/fss_write/c/main/main.c @@ -65,7 +65,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { fss_write_setting_load(arguments, &data, &fss_write_main_setting_load_as); } - if (!fss_write_signal_check(&data)) { + if (!macro_fss_write_signal_check(&data.program, &data.setting.state)) { fss_write_main(&data); } diff --git a/level_3/fss_write/c/main/signal.c b/level_3/fss_write/c/main/signal.c index 56a3955..8a4644e 100644 --- a/level_3/fss_write/c/main/signal.c +++ b/level_3/fss_write/c/main/signal.c @@ -4,41 +4,6 @@ extern "C" { #endif -#if !defined(_di_fss_write_signal_check_) && defined(_di_thread_support_) - f_status_t fss_write_signal_check(fss_write_main_t * const main) { - - if (!main) return F_false; - if (main->program.signal_received) return F_true; - - if (!((++main->program.signal_check) % fss_write_signal_check_d)) { - if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - main->program.signal_check = 0; - } - - return F_false; - } -#endif // !defined(_di_fss_write_signal_check_) && defined(_di_thread_support_) - -#if !defined(_di_fss_write_signal_check_) && !defined(_di_thread_support_) - f_status_t fss_write_signal_check(fss_write_main_t * const main) { - - if (!main) return F_false; - - if (main->program.signal_received) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - return F_false; - } -#endif // !defined(_di_fss_write_signal_check_) && !defined(_di_thread_support_) - #if !defined(_di_fss_write_signal_handler_) && !defined(_di_thread_support_) void fss_write_signal_handler(fss_write_main_t * const main) { diff --git a/level_3/fss_write/c/main/signal.h b/level_3/fss_write/c/main/signal.h index b301fa1..a4d7013 100644 --- a/level_3/fss_write/c/main/signal.h +++ b/level_3/fss_write/c/main/signal.h @@ -17,38 +17,6 @@ extern "C" { #endif /** - * Check to see if a signal is received. - * - * If main.signal is non-zero, then this handles the following signals: - * - F_signal_abort - * - F_signal_broken_pipe - * - F_signal_hangup - * - F_signal_interrupt - * - F_signal_quit - * - F_signal_termination - * - * There is a threaded and a non-threaded version of this. - * The non-threaded version checks periodically using fss_write_signal_check_d and updates main->signal_check as needed. - * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received. - * - * @param main - * The main program and settings data. - * - * This does not alter main.setting.state.status. - * - * @return - * F_true on signal received. - * F_false otherwise. - * - * @see fss_write_signal_handler() - * - * @see fll_program_standard_signal_received() - */ -#ifndef _di_fss_write_signal_check_ - extern f_status_t fss_write_signal_check(fss_write_main_t * const main); -#endif // _di_fss_write_signal_check_ - -/** * Signal handler for signals/interrupts. * * This blocks until an expected signal is recieved. diff --git a/level_3/fss_write/c/payload/fss_write.c b/level_3/fss_write/c/payload/fss_write.c index e32c7da..c302eb0 100644 --- a/level_3/fss_write/c/payload/fss_write.c +++ b/level_3/fss_write/c/payload/fss_write.c @@ -84,17 +84,7 @@ extern "C" { for (;;) { - if (!((++main->program.signal_check) % fss_write_signal_check_d)) { - if (fll_program_standard_signal_received(&main->program)) { - fll_program_print_signal_received(&main->program.warning, main->program.signal_received); - - main->setting.state.status = F_status_set_error(F_interrupt); - - break; - } - - main->program.signal_check = 0; - } + if (macro_fss_write_signal_check(&main->program, &main->setting.state)) break; if (range.start > range.stop) { if (status_pipe == F_okay_eof) break; diff --git a/level_3/fss_write/c/payload/main.c b/level_3/fss_write/c/payload/main.c index 4a8eee8..eefd07c 100644 --- a/level_3/fss_write/c/payload/main.c +++ b/level_3/fss_write/c/payload/main.c @@ -67,7 +67,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { fss_write_setting_load(arguments, &data, &fss_write_payload_setting_load); } - if (!fss_write_signal_check(&data)) { + if (!macro_fss_write_signal_check(&data.program, &data.setting.state)) { fss_write_main(&data); } diff --git a/level_3/iki_read/c/eki/identify.c b/level_3/iki_read/c/eki/identify.c index 176b4f1..f71dae7 100644 --- a/level_3/iki_read/c/eki/identify.c +++ b/level_3/iki_read/c/eki/identify.c @@ -23,7 +23,7 @@ extern "C" { for (j = 0; j < data->vocabularys.array[i].used; ++j) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; if (main->setting.replace.used) { k = main->setting.replace.used - 1; diff --git a/level_3/iki_read/c/eki/main.c b/level_3/iki_read/c/eki/main.c index 3c88a8f..7c4c26b 100644 --- a/level_3/iki_read/c/eki/main.c +++ b/level_3/iki_read/c/eki/main.c @@ -69,7 +69,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { iki_read_setting_load(arguments, &data, &iki_read_eki_setting_load); } - if (!iki_read_signal_check(&data)) { + if (!macro_iki_read_signal_check(&data.program, &data.setting.state)) { iki_read_main(&data); } diff --git a/level_3/iki_read/c/eki/process.c b/level_3/iki_read/c/eki/process.c index 1208a88..d7397d4 100644 --- a/level_3/iki_read/c/eki/process.c +++ b/level_3/iki_read/c/eki/process.c @@ -244,15 +244,15 @@ extern "C" { for (i = 0; i < data->vocabularys.used; ++i) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; for (j = 0; j < data->vocabularys.array[i].used; ++j) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; for (k = 0; k < main->setting.names.used; ++k) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; if (f_compare_dynamic_partial_string(main->setting.names.array[k].string, main->cache.buffer, main->setting.names.array[k].used, data->vocabularys.array[i].array[j]) == F_equal_to) { matched |= 0x1; @@ -378,7 +378,7 @@ extern "C" { else if (main->setting.flag & iki_read_main_flag_line_d) { for (i = 0; F_status_is_error_not(main->setting.state.status) && i < data->variable.used; ++i) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; iki_read_eki_process_buffer_at(main, i); iki_read_process_buffer_at_newline(main); @@ -398,7 +398,7 @@ extern "C" { else { for (i = 0; F_status_is_error_not(main->setting.state.status) && i < data->variable.used; ++i) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; iki_read_eki_process_buffer_at(main, i); iki_read_process_buffer_at_newline(main); @@ -412,7 +412,7 @@ extern "C" { for (i = 0; i < data->variable.used; ++i) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; if (main->call.print_data) { main->call.print_data(&main->program.output, i); @@ -521,7 +521,7 @@ extern "C" { while (i <= range_buffer->stop && j < stop) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; if (i < data->variable.array[j].start) { range_buffer->start = i; @@ -656,7 +656,7 @@ extern "C" { for (i = 0; i < main->program.parameters.array[iki_read_parameter_name_e].values.used; ++i) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; index = main->program.parameters.array[iki_read_parameter_name_e].values.array[i]; name.used = 0; @@ -675,11 +675,11 @@ extern "C" { for (j = 0; j < data->vocabularys.used; ++j) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; for (k = 0; k < data->vocabularys.array[j].used; ++k) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; main->setting.state.status = f_compare_dynamic_partial(name, main->cache.buffer, range, data->vocabularys.array[j].array[k]); diff --git a/level_3/iki_read/c/iki/identify.c b/level_3/iki_read/c/iki/identify.c index 6e4af76..00fd941 100644 --- a/level_3/iki_read/c/iki/identify.c +++ b/level_3/iki_read/c/iki/identify.c @@ -17,7 +17,7 @@ extern "C" { for (i = 0; i < data->vocabulary.used; ++i) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; if (main->setting.replace.used) { main->setting.map_replacess.array[i].used = 0; diff --git a/level_3/iki_read/c/iki/main.c b/level_3/iki_read/c/iki/main.c index 531b035..b6f97d6 100644 --- a/level_3/iki_read/c/iki/main.c +++ b/level_3/iki_read/c/iki/main.c @@ -70,7 +70,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { iki_read_setting_load(arguments, &data, &iki_read_iki_setting_load); } - if (!iki_read_signal_check(&data)) { + if (!macro_iki_read_signal_check(&data.program, &data.setting.state)) { iki_read_main(&data); } diff --git a/level_3/iki_read/c/iki/process.c b/level_3/iki_read/c/iki/process.c index 199c78f..b3bc261 100644 --- a/level_3/iki_read/c/iki/process.c +++ b/level_3/iki_read/c/iki/process.c @@ -219,7 +219,7 @@ extern "C" { for (i = 0; i < data->vocabulary.used; ++i) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; if (f_compare_dynamic_partial_string(main->setting.names.array[j].string, main->cache.buffer, main->setting.names.array[j].used, data->vocabulary.array[i]) == F_equal_to) { matched |= 0x1; @@ -335,7 +335,7 @@ extern "C" { else if (main->setting.flag & iki_read_main_flag_line_d) { for (i = 0; F_status_is_error_not(main->setting.state.status) && i < data->variable.used; ++i) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; iki_read_iki_process_buffer_at(main, i); iki_read_process_buffer_at_newline(main); @@ -355,7 +355,7 @@ extern "C" { else { for (i = 0; F_status_is_error_not(main->setting.state.status) && i < data->variable.used; ++i) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; iki_read_iki_process_buffer_at(main, i); iki_read_process_buffer_at_newline(main); @@ -369,7 +369,7 @@ extern "C" { for (i = 0; i < data->variable.used; ++i) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; if (main->call.print_data) { main->call.print_data(&main->program.output, i); @@ -477,7 +477,7 @@ extern "C" { while (i <= range_buffer->stop && j < stop) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; if (i < data->variable.array[j].start) { range_buffer->start = i; @@ -606,7 +606,7 @@ extern "C" { for (i = 0; i < main->program.parameters.array[iki_read_parameter_name_e].values.used; ++i) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; index = main->program.parameters.array[iki_read_parameter_name_e].values.array[i]; name.used = 0; @@ -625,7 +625,7 @@ extern "C" { for (j = 0; j < data->vocabulary.used; ++j) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; main->setting.state.status = f_compare_dynamic_partial(name, main->cache.buffer, range, data->vocabulary.array[j]); diff --git a/level_3/iki_read/c/main/common/define.h b/level_3/iki_read/c/main/common/define.h index aab5732..9700fc1 100644 --- a/level_3/iki_read/c/main/common/define.h +++ b/level_3/iki_read/c/main/common/define.h @@ -119,18 +119,23 @@ extern "C" { * The program signal defines. * * iki_read_signal_*_d: - * - check: Number of iterations before performing signal check in non-threaded signal handling. * - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe). - * - check_tiny: The tiny check. - * - check_short: The short signal check. */ #ifndef _di_iki_read_signal_d_ - #define iki_read_signal_check_d 500000 #define iki_read_signal_check_failsafe_d 20000 - #define iki_read_signal_check_tiny_d 4 - #define iki_read_signal_check_short_d 16 #endif // _di_iki_read_signal_d_ +/** + * A macro wrapping the appropriate signal check function based on threaded/non-threaded support. + */ +#ifndef _di_iki_read_signal_check_d_ + #ifdef _di_thread_support_ + #define macro_iki_read_signal_check(program, state) fll_program_signal_check_loop(program, state) + #else + #define macro_iki_read_signal_check(program, state) fll_program_signal_check_simple(program, state) + #endif // _di_thread_support_ +#endif // _di_iki_read_signal_check_d_ + #ifdef __cplusplus } // extern "C" #endif diff --git a/level_3/iki_read/c/main/iki_read.c b/level_3/iki_read/c/main/iki_read.c index 6f2edf8..f3b7f47 100644 --- a/level_3/iki_read/c/main/iki_read.c +++ b/level_3/iki_read/c/main/iki_read.c @@ -55,7 +55,7 @@ extern "C" { for (f_number_unsigned_t i = 0; i < main->setting.files.used; ++i) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; file.stream = 0; file.id = -1; @@ -115,7 +115,7 @@ extern "C" { for (size_read = 0; size_read < size_file; size_read += size_block) { - if (size_file > iki_read_block_max_d && iki_read_signal_check(main)) break; + if (size_file > iki_read_block_max_d && macro_iki_read_signal_check(&main->program, &main->setting.state)) break; main->setting.state.status = f_file_stream_read_until(file, size_block, &main->cache.buffer); if (F_status_is_error(main->setting.state.status)) break; diff --git a/level_3/iki_read/c/main/print/data.c b/level_3/iki_read/c/main/print/data.c index 4931f88..167b66c 100644 --- a/level_3/iki_read/c/main/print/data.c +++ b/level_3/iki_read/c/main/print/data.c @@ -24,7 +24,7 @@ extern "C" { for (f_number_unsigned_t first = 0; range.start <= range.stop && range.start < main->cache.expand.used; ) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; main->setting.state.status = f_string_dynamic_seek_line(main->cache.expand, &range); if (F_status_is_error(main->setting.state.status)) return; @@ -76,7 +76,7 @@ extern "C" { for (; range.start <= range.stop && range.start < main->cache.expand.used; ++total, ++range.start) { - if (iki_read_signal_check(main)) return; + if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return; main->setting.state.status = f_string_dynamic_seek_line(main->cache.expand, &range); if (F_status_is_error(main->setting.state.status)) return; diff --git a/level_3/iki_read/c/main/print/data.h b/level_3/iki_read/c/main/print/data.h index 3fa064b..1a788aa 100644 --- a/level_3/iki_read/c/main/print/data.h +++ b/level_3/iki_read/c/main/print/data.h @@ -30,7 +30,7 @@ extern "C" { * F_data_not on success, but total is 0 or line is out of range. * * Error (with error bit set) from f_string_dynamic_seek_line(). - * Error (with error bit set) from iki_read_signal_check(). + * Error (with error bit set) from macro_iki_read_signal_check(). * * Error (with error bit) if status already has an error before start of function. */ @@ -48,13 +48,13 @@ extern "C" { * F_okay on success and data was processed. * F_data_not on success, but there was no data to process (0 is printed). * - * Signal from iki_read_signal_check(). + * Signal from macro_iki_read_signal_check(). * * Error (with error bit set) from f_string_dynamic_seek_line() * * @see f_string_dynamic_seek_line() * - * @see iki_read_signal_check() + * @see macro_iki_read_signal_check() */ #ifndef _di_iki_read_print_data_total_ extern void iki_read_print_data_total(fl_print_t * const print, const f_number_unsigned_t); @@ -77,12 +77,12 @@ extern "C" { * F_data_not on success, but total is 0 or line is out of range. * * Error (with error bit set) from f_string_dynamic_seek_line(). - * Error (with error bit set) from iki_read_signal_check(). + * Error (with error bit set) from macro_iki_read_signal_check(). * * Error (with error bit) if status already has an error before start of function. * * @see f_string_dynamic_seek_line() - * @see iki_read_signal_check() + * @see macro_iki_read_signal_check() */ #ifndef _di_iki_read_print_data_line_total_expand_ extern void iki_read_print_data_total_expand(fl_print_t * const print); diff --git a/level_3/iki_read/c/main/signal.c b/level_3/iki_read/c/main/signal.c index e79cc9e..cf813a1 100644 --- a/level_3/iki_read/c/main/signal.c +++ b/level_3/iki_read/c/main/signal.c @@ -4,41 +4,6 @@ extern "C" { #endif -#if !defined(_di_iki_read_signal_check_) && defined(_di_thread_support_) - f_status_t iki_read_signal_check(iki_read_main_t * const main) { - - if (!main) return F_false; - if (main->program.signal_received) return F_true; - - if (!((++main->program.signal_check) % iki_read_signal_check_d)) { - if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - main->program.signal_check = 0; - } - - return F_false; - } -#endif // !defined(_di_iki_read_signal_check_) && defined(_di_thread_support_) - -#if !defined(_di_iki_read_signal_check_) && !defined(_di_thread_support_) - f_status_t iki_read_signal_check(iki_read_main_t * const main) { - - if (!main) return F_false; - - if (main->program.signal_received) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - return F_false; - } -#endif // !defined(_di_iki_read_signal_check_) && !defined(_di_thread_support_) - #if !defined(_di_iki_read_signal_handler_) && !defined(_di_thread_support_) void iki_read_signal_handler(iki_read_main_t * const main) { diff --git a/level_3/iki_read/c/main/signal.h b/level_3/iki_read/c/main/signal.h index a8ece07..8c9ba03 100644 --- a/level_3/iki_read/c/main/signal.h +++ b/level_3/iki_read/c/main/signal.h @@ -17,38 +17,6 @@ extern "C" { #endif /** - * Check to see if a signal is received. - * - * If main.signal is non-zero, then this handles the following signals: - * - F_signal_abort - * - F_signal_broken_pipe - * - F_signal_hangup - * - F_signal_interrupt - * - F_signal_quit - * - F_signal_termination - * - * There is a threaded and a non-threaded version of this. - * The non-threaded version checks periodically using iki_read_signal_check_d and updates main->signal_check as needed. - * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received. - * - * @param main - * The main program and settings data. - * - * This does not alter main.setting.state.status. - * - * @return - * F_true on signal received. - * F_false otherwise. - * - * @see iki_read_signal_handler() - * - * @see fll_program_standard_signal_received() - */ -#ifndef _di_iki_read_signal_check_ - extern f_status_t iki_read_signal_check(iki_read_main_t * const main); -#endif // _di_iki_read_signal_check_ - -/** * Signal handler for signals/interrupts. * * This blocks until an expected signal is recieved. diff --git a/level_3/iki_write/c/eki/common.c b/level_3/iki_write/c/eki/common.c index d17fcfe..26ae331 100644 --- a/level_3/iki_write/c/eki/common.c +++ b/level_3/iki_write/c/eki/common.c @@ -41,7 +41,7 @@ extern "C" { // Construct the array without allocating any more memory by setting this as a static string (used > 0, size = 0). for (index = 0; at_object < object->values.used; ) { - if (iki_write_signal_check(main)) return; + if (macro_iki_write_signal_check(&main->program, &main->setting.state)) return; main->setting.state.status = f_memory_array_increase(main->setting.state.step_small, sizeof(f_string_dynamic_t), (void **) &objectss->array[objectss->used].array, &objectss->array[objectss->used].used, &objectss->array[objectss->used].size); @@ -105,7 +105,7 @@ extern "C" { // Construct the array without allocating any more memory by setting this as a static string (used > 0, size = 0). for (index = 0; main->setting.contents.used < content->values.used; ) { - if (iki_write_signal_check(main)) return; + if (macro_iki_write_signal_check(&main->program, &main->setting.state)) return; index = content->values.array[main->setting.contents.used]; diff --git a/level_3/iki_write/c/eki/main.c b/level_3/iki_write/c/eki/main.c index a0d10a0..e0bf33f 100644 --- a/level_3/iki_write/c/eki/main.c +++ b/level_3/iki_write/c/eki/main.c @@ -59,7 +59,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { iki_write_setting_load(arguments, &data, &iki_write_eki_setting_load); } - if (!iki_write_signal_check(&data)) { + if (!macro_iki_write_signal_check(&data.program, &data.setting.state)) { iki_write_main(&data); } diff --git a/level_3/iki_write/c/eki/process.c b/level_3/iki_write/c/eki/process.c index d55fb0d..72a9e8f 100644 --- a/level_3/iki_write/c/eki/process.c +++ b/level_3/iki_write/c/eki/process.c @@ -43,7 +43,7 @@ extern "C" { for (; range_object.start <= range_object.stop; ++total) { - if (iki_write_signal_check(main)) return; + if (macro_iki_write_signal_check(&main->program, &main->setting.state)) return; main->setting.state.status = f_string_dynamic_seek_to(main->cache.buffer, f_string_ascii_space_back_s.string[0], &range_object); @@ -83,7 +83,7 @@ extern "C" { for (; i < total; ++i) { - if (iki_write_signal_check(main)) return; + if (macro_iki_write_signal_check(&main->program, &main->setting.state)) return; main->cache.objects.array[main->cache.objects.used].used = 0; diff --git a/level_3/iki_write/c/iki/common.c b/level_3/iki_write/c/iki/common.c index 22c68db..79de01c 100644 --- a/level_3/iki_write/c/iki/common.c +++ b/level_3/iki_write/c/iki/common.c @@ -36,7 +36,7 @@ extern "C" { // Construct the array without allocating any more memory by setting this as a static string (used > 0, size = 0). for (index = 0; main->setting.objectss.used < values->used; ) { - if (iki_write_signal_check(main)) return; + if (macro_iki_write_signal_check(&main->program, &main->setting.state)) return; main->setting.state.status = f_memory_arrays_resize(1, sizeof(f_string_dynamic_t), (void **) &main->setting.objectss.array[main->setting.objectss.used].array, &main->setting.objectss.array[main->setting.objectss.used].used, &main->setting.objectss.array[main->setting.objectss.used].size, &f_string_dynamics_delete_callback); @@ -80,7 +80,7 @@ extern "C" { // Construct the array without allocating any more memory by setting this as a static string (used > 0, size = 0). for (index = 0; main->setting.contents.used < values->used; ) { - if (iki_write_signal_check(main)) return; + if (macro_iki_write_signal_check(&main->program, &main->setting.state)) return; index = values->array[main->setting.contents.used]; diff --git a/level_3/iki_write/c/iki/main.c b/level_3/iki_write/c/iki/main.c index 2573014..0164f4a 100644 --- a/level_3/iki_write/c/iki/main.c +++ b/level_3/iki_write/c/iki/main.c @@ -59,7 +59,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { iki_write_setting_load(arguments, &data, &iki_write_iki_setting_load); } - if (!iki_write_signal_check(&data)) { + if (!macro_iki_write_signal_check(&data.program, &data.setting.state)) { iki_write_main(&data); } diff --git a/level_3/iki_write/c/main/common/define.h b/level_3/iki_write/c/main/common/define.h index e3262f3..44ca2af 100644 --- a/level_3/iki_write/c/main/common/define.h +++ b/level_3/iki_write/c/main/common/define.h @@ -87,18 +87,23 @@ extern "C" { * The program signal defines. * * iki_write_signal_*_d: - * - check: Number of iterations before performing signal check in non-threaded signal handling. * - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe). - * - check_tiny: The tiny check. - * - check_short: The short signal check. */ #ifndef _di_iki_write_signal_d_ - #define iki_write_signal_check_d 500000 #define iki_write_signal_check_failsafe_d 20000 - #define iki_write_signal_check_tiny_d 4 - #define iki_write_signal_check_short_d 16 #endif // _di_iki_write_signal_d_ +/** + * A macro wrapping the appropriate signal check function based on threaded/non-threaded support. + */ +#ifndef _di_iki_write_signal_check_d_ + #ifdef _di_thread_support_ + #define macro_iki_write_signal_check(program, state) fll_program_signal_check_loop(program, state) + #else + #define macro_iki_write_signal_check(program, state) fll_program_signal_check_simple(program, state) + #endif // _di_thread_support_ +#endif // _di_byte_dump_signal_check_d_ + #ifdef __cplusplus } // extern "C" #endif diff --git a/level_3/iki_write/c/main/iki_write.c b/level_3/iki_write/c/main/iki_write.c index d4a7052..5461f3d 100644 --- a/level_3/iki_write/c/main/iki_write.c +++ b/level_3/iki_write/c/main/iki_write.c @@ -48,7 +48,7 @@ extern "C" { range.start = 0; do { - if (iki_write_signal_check(main)) return; + if (macro_iki_write_signal_check(&main->program, &main->setting.state)) return; if (status != F_okay_eof) { status = f_file_read(pipe, &main->cache.buffer); @@ -123,7 +123,7 @@ extern "C" { if (F_status_is_error_not(main->setting.state.status) && F_status_set_fine(main->setting.state.status) != F_interrupt) { for (f_number_unsigned_t i = 0; i < main->setting.objectss.used; ++i) { - if (iki_write_signal_check(main)) return; + if (macro_iki_write_signal_check(&main->program, &main->setting.state)) return; main->call.process_objects_content((void *) main, main->setting.objectss.array[i], main->setting.contents.array[i]); if (F_status_is_error(main->setting.state.status)) break; diff --git a/level_3/iki_write/c/main/signal.c b/level_3/iki_write/c/main/signal.c index 10eeedc..8736063 100644 --- a/level_3/iki_write/c/main/signal.c +++ b/level_3/iki_write/c/main/signal.c @@ -4,41 +4,6 @@ extern "C" { #endif -#if !defined(_di_iki_write_signal_check_) && defined(_di_thread_support_) - f_status_t iki_write_signal_check(iki_write_main_t * const main) { - - if (!main) return F_false; - if (main->program.signal_received) return F_true; - - if (!((++main->program.signal_check) % iki_write_signal_check_d)) { - if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - main->program.signal_check = 0; - } - - return F_false; - } -#endif // !defined(_di_iki_write_signal_check_) && defined(_di_thread_support_) - -#if !defined(_di_iki_write_signal_check_) && !defined(_di_thread_support_) - f_status_t iki_write_signal_check(iki_write_main_t * const main) { - - if (!main) return F_false; - - if (main->program.signal_received) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - return F_false; - } -#endif // !defined(_di_iki_write_signal_check_) && !defined(_di_thread_support_) - #if !defined(_di_iki_write_signal_handler_) && !defined(_di_thread_support_) void iki_write_signal_handler(iki_write_main_t * const main) { diff --git a/level_3/iki_write/c/main/signal.h b/level_3/iki_write/c/main/signal.h index 9940896..1c02f4c 100644 --- a/level_3/iki_write/c/main/signal.h +++ b/level_3/iki_write/c/main/signal.h @@ -17,38 +17,6 @@ extern "C" { #endif /** - * Check to see if a signal is received. - * - * If main.signal is non-zero, then this handles the following signals: - * - F_signal_abort - * - F_signal_broken_pipe - * - F_signal_hangup - * - F_signal_interrupt - * - F_signal_quit - * - F_signal_termination - * - * There is a threaded and a non-threaded version of this. - * The non-threaded version checks periodically using iki_write_signal_check_d and updates main->signal_check as needed. - * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received. - * - * @param main - * The main program and settings data. - * - * This does not alter main.setting.state.status. - * - * @return - * F_true on signal received. - * F_false otherwise. - * - * @see iki_write_signal_handler() - * - * @see fll_program_standard_signal_received() - */ -#ifndef _di_iki_write_signal_check_ - extern f_status_t iki_write_signal_check(iki_write_main_t * const main); -#endif // _di_iki_write_signal_check_ - -/** * Signal handler for signals/interrupts. * * This blocks until an expected signal is recieved. diff --git a/level_3/status_code/c/fss/main.c b/level_3/status_code/c/fss/main.c index 284296f..78c5107 100644 --- a/level_3/status_code/c/fss/main.c +++ b/level_3/status_code/c/fss/main.c @@ -63,7 +63,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { status_code_setting_load(arguments, &data); } - if (!status_code_signal_check(&data)) { + if (!macro_status_code_signal_check(&data.program, &data.setting.state)) { status_code_main(&data); } diff --git a/level_3/status_code/c/main/common/define.h b/level_3/status_code/c/main/common/define.h index 5af2fc6..d665afa 100644 --- a/level_3/status_code/c/main/common/define.h +++ b/level_3/status_code/c/main/common/define.h @@ -89,18 +89,23 @@ extern "C" { * The program signal defines. * * status_code_signal_*_d: - * - check: Number of iterations before performing signal check in non-threaded signal handling. * - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe). - * - check_tiny: The tiny check. - * - check_short: The short signal check. */ #ifndef _di_status_code_signal_d_ - #define status_code_signal_check_d 500000 #define status_code_signal_check_failsafe_d 20000 - #define status_code_signal_check_tiny_d 4 - #define status_code_signal_check_short_d 16 #endif // _di_status_code_signal_d_ +/** + * A macro wrapping the appropriate signal check function based on threaded/non-threaded support. + */ +#ifndef _di_status_code_signal_check_d_ + #ifdef _di_thread_support_ + #define macro_status_code_signal_check(program, state) fll_program_signal_check_loop(program, state) + #else + #define macro_status_code_signal_check(program, state) fll_program_signal_check_simple(program, state) + #endif // _di_thread_support_ +#endif // _di_status_code_signal_check_d_ + #ifdef __cplusplus } // extern "C" #endif diff --git a/level_3/status_code/c/main/main.c b/level_3/status_code/c/main/main.c index 0cc4afa..fbe2be6 100644 --- a/level_3/status_code/c/main/main.c +++ b/level_3/status_code/c/main/main.c @@ -61,7 +61,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { status_code_setting_load(arguments, &data); } - if (!status_code_signal_check(&data)) { + if (!macro_status_code_signal_check(&data.program, &data.setting.state)) { status_code_main(&data); } diff --git a/level_3/status_code/c/main/signal.c b/level_3/status_code/c/main/signal.c index 3be8e85..9463972 100644 --- a/level_3/status_code/c/main/signal.c +++ b/level_3/status_code/c/main/signal.c @@ -4,41 +4,6 @@ extern "C" { #endif -#if !defined(_di_status_code_signal_check_) && defined(_di_thread_support_) - f_status_t status_code_signal_check(status_code_main_t * const main) { - - if (!main) return F_false; - if (main->program.signal_received) return F_true; - - if (!((++main->program.signal_check) % status_code_signal_check_d)) { - if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - main->program.signal_check = 0; - } - - return F_false; - } -#endif // !defined(_di_status_code_signal_check_) && defined(_di_thread_support_) - -#if !defined(_di_status_code_signal_check_) && !defined(_di_thread_support_) - f_status_t status_code_signal_check(status_code_main_t * const main) { - - if (!main) return F_false; - - if (main->program.signal_received) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - return F_false; - } -#endif // !defined(_di_status_code_signal_check_) && !defined(_di_thread_support_) - #if !defined(_di_status_code_signal_handler_) && !defined(_di_thread_support_) void status_code_signal_handler(status_code_main_t * const main) { diff --git a/level_3/status_code/c/main/signal.h b/level_3/status_code/c/main/signal.h index bf9fb19..e64bf48 100644 --- a/level_3/status_code/c/main/signal.h +++ b/level_3/status_code/c/main/signal.h @@ -17,38 +17,6 @@ extern "C" { #endif /** - * Check to see if a signal is received. - * - * If main.signal is non-zero, then this handles the following signals: - * - F_signal_abort - * - F_signal_broken_pipe - * - F_signal_hangup - * - F_signal_interrupt - * - F_signal_quit - * - F_signal_termination - * - * There is a threaded and a non-threaded version of this. - * The non-threaded version checks periodically using status_code_signal_check_d and updates main->signal_check as needed. - * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received. - * - * @param main - * The main program and settings data. - * - * This does not alter main.setting.state.status. - * - * @return - * F_true on signal received. - * F_false otherwise. - * - * @see status_code_signal_handler() - * - * @see fll_program_standard_signal_received() - */ -#ifndef _di_status_code_signal_check_ - extern f_status_t status_code_signal_check(status_code_main_t * const main); -#endif // _di_status_code_signal_check_ - -/** * Signal handler for signals/interrupts. * * This blocks until an expected signal is recieved. diff --git a/level_3/status_code/c/main/status_code.c b/level_3/status_code/c/main/status_code.c index 118f19d..f224e02 100644 --- a/level_3/status_code/c/main/status_code.c +++ b/level_3/status_code/c/main/status_code.c @@ -55,7 +55,7 @@ extern "C" { for (f_number_unsigned_t i = 0; i < main->program.parameters.remaining.used; ++i) { - if (status_code_signal_check(main)) break; + if (macro_status_code_signal_check(&main->program, &main->setting.state)) break; status = main->setting.state.status; @@ -79,7 +79,7 @@ extern "C" { for (f_number_unsigned_t i = 0; i < main->program.parameters.remaining.used; ++i) { - if (status_code_signal_check(main)) break; + if (macro_status_code_signal_check(&main->program, &main->setting.state)) break; status = main->setting.state.status; @@ -103,7 +103,7 @@ extern "C" { for (f_number_unsigned_t i = 0; i < main->program.parameters.remaining.used; ++i) { - if (status_code_signal_check(main)) break; + if (macro_status_code_signal_check(&main->program, &main->setting.state)) break; status = main->setting.state.status; diff --git a/level_3/utf8/c/main/bytesequence.c b/level_3/utf8/c/main/bytesequence.c index 5f640ec..0ed2f78 100644 --- a/level_3/utf8/c/main/bytesequence.c +++ b/level_3/utf8/c/main/bytesequence.c @@ -79,7 +79,7 @@ extern "C" { for (i = 0; F_status_is_error_not(main->setting.state.status) && i < main->setting.buffer.used; ) { - if (utf8_signal_check(main)) return; + if (macro_utf8_signal_check(&main->program, &main->setting.state)) return; main->setting.state.status = F_okay; diff --git a/level_3/utf8/c/main/codepoint.c b/level_3/utf8/c/main/codepoint.c index fddcce5..de76e43 100644 --- a/level_3/utf8/c/main/codepoint.c +++ b/level_3/utf8/c/main/codepoint.c @@ -350,7 +350,7 @@ extern "C" { for (i = 0; F_status_is_error_not(main->setting.state.status) && i < main->setting.buffer.used; ) { - if (utf8_signal_check(main)) return; + if (macro_utf8_signal_check(&main->program, &main->setting.state)) return; main->setting.state.status = F_okay; diff --git a/level_3/utf8/c/main/common/define.h b/level_3/utf8/c/main/common/define.h index f541f74..488fb43 100644 --- a/level_3/utf8/c/main/common/define.h +++ b/level_3/utf8/c/main/common/define.h @@ -117,18 +117,23 @@ extern "C" { * The program signal defines. * * utf8_signal_*_d: - * - check: Number of iterations before performing signal check in non-threaded signal handling. * - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe). - * - check_tiny: The tiny check. - * - check_short: The short signal check. */ #ifndef _di_utf8_signal_d_ - #define utf8_signal_check_d 500000 #define utf8_signal_check_failsafe_d 20000 - #define utf8_signal_check_tiny_d 4 - #define utf8_signal_check_short_d 16 #endif // _di_utf8_signal_d_ +/** + * A macro wrapping the appropriate signal check function based on threaded/non-threaded support. + */ +#ifndef _di_utf8_signal_check_d_ + #ifdef _di_thread_support_ + #define macro_utf8_signal_check(program, state) fll_program_signal_check_loop(program, state) + #else + #define macro_utf8_signal_check(program, state) fll_program_signal_check_simple(program, state) + #endif // _di_thread_support_ +#endif // _di_utf8_signal_check_d_ + #ifdef __cplusplus } // extern "C" #endif diff --git a/level_3/utf8/c/main/main.c b/level_3/utf8/c/main/main.c index 589a29f..7d83edc 100644 --- a/level_3/utf8/c/main/main.c +++ b/level_3/utf8/c/main/main.c @@ -55,7 +55,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { utf8_setting_load(arguments, &data); } - if (!utf8_signal_check(&data)) { + if (!macro_utf8_signal_check(&data.program, &data.setting.state)) { utf8_main(&data); } diff --git a/level_3/utf8/c/main/process.c b/level_3/utf8/c/main/process.c index 0e565b4..feb8e8b 100644 --- a/level_3/utf8/c/main/process.c +++ b/level_3/utf8/c/main/process.c @@ -26,7 +26,7 @@ extern "C" { for (; text.string[0] && F_status_is_error_not(main->setting.state.status); ) { - if (utf8_signal_check(main)) return; + if (macro_utf8_signal_check(&main->program, &main->setting.state)) return; main->setting.state.status = F_okay; diff --git a/level_3/utf8/c/main/signal.c b/level_3/utf8/c/main/signal.c index ce5fa2b..c9e145a 100644 --- a/level_3/utf8/c/main/signal.c +++ b/level_3/utf8/c/main/signal.c @@ -4,41 +4,6 @@ extern "C" { #endif -#if !defined(_di_utf8_signal_check_) && defined(_di_thread_support_) - f_status_t utf8_signal_check(utf8_main_t * const main) { - - if (!main) return F_false; - if (main->program.signal_received) return F_true; - - if (!((++main->program.signal_check) % utf8_signal_check_d)) { - if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - main->program.signal_check = 0; - } - - return F_false; - } -#endif // !defined(_di_utf8_signal_check_) && defined(_di_thread_support_) - -#if !defined(_di_utf8_signal_check_) && !defined(_di_thread_support_) - f_status_t utf8_signal_check(utf8_main_t * const main) { - - if (!main) return F_false; - - if (main->program.signal_received) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - return F_false; - } -#endif // !defined(_di_utf8_signal_check_) && !defined(_di_thread_support_) - #if !defined(_di_utf8_signal_handler_) && !defined(_di_thread_support_) void utf8_signal_handler(utf8_main_t * const main) { diff --git a/level_3/utf8/c/main/signal.h b/level_3/utf8/c/main/signal.h index c18cf59..e7b3546 100644 --- a/level_3/utf8/c/main/signal.h +++ b/level_3/utf8/c/main/signal.h @@ -17,38 +17,6 @@ extern "C" { #endif /** - * Check to see if a signal is received. - * - * If main.signal is non-zero, then this handles the following signals: - * - F_signal_abort - * - F_signal_broken_pipe - * - F_signal_hangup - * - F_signal_interrupt - * - F_signal_quit - * - F_signal_termination - * - * There is a threaded and a non-threaded version of this. - * The non-threaded version checks periodically using utf8_signal_check_d and updates main->signal_check as needed. - * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received. - * - * @param main - * The main program and settings data. - * - * This does not alter main.setting.state.status. - * - * @return - * F_true on signal received. - * F_false otherwise. - * - * @see utf8_signal_handler() - * - * @see fll_program_standard_signal_received() - */ -#ifndef _di_utf8_signal_check_ - extern f_status_t utf8_signal_check(utf8_main_t * const main); -#endif // _di_utf8_signal_check_ - -/** * Signal handler for signals/interrupts. * * This blocks until an expected signal is recieved. diff --git a/level_3/utf8/c/main/utf8.c b/level_3/utf8/c/main/utf8.c index d70eb68..16fdcd4 100644 --- a/level_3/utf8/c/main/utf8.c +++ b/level_3/utf8/c/main/utf8.c @@ -65,7 +65,7 @@ extern "C" { for (f_number_unsigned_t i = 0; i < main->setting.path_files_from.used && F_status_is_error_not(main->setting.state.status); ++i) { - if (utf8_signal_check(main)) return; + if (macro_utf8_signal_check(&main->program, &main->setting.state)) return; utf8_print_data_section_header_file(&main->program.output, main->setting.path_files_from.array[i], i); @@ -129,7 +129,7 @@ extern "C" { if (F_status_is_error_not(main->setting.state.status) && main->setting.remaining.used) { for (f_number_unsigned_t i = 0; F_status_is_error_not(main->setting.state.status) && i < main->setting.remaining.used; ++i) { - if (utf8_signal_check(main)) return; + if (macro_utf8_signal_check(&main->program, &main->setting.state)) return; utf8_print_data_section_header_parameter(&main->program.output, i); -- 1.8.3.1