From: Kevin Day Date: Sun, 13 Dec 2020 21:01:33 +0000 (-0600) Subject: Update: always ensure standard file descriptors are closed on program exit. X-Git-Tag: 0.5.2~19 X-Git-Url: https://git.kevux.org/?a=commitdiff_plain;h=ee9ade8aa608c58184fa9cb7bd17cd4854b17c52;p=fll Update: always ensure standard file descriptors are closed on program exit. Explicitly close file descritpros on exit. This is especially important now that the program could be a child process and the file descriptor could be open between a parent process. --- diff --git a/level_3/byte_dump/c/main.c b/level_3/byte_dump/c/main.c index 9a955d2b3..171442274 100644 --- a/level_3/byte_dump/c/main.c +++ b/level_3/byte_dump/c/main.c @@ -8,7 +8,14 @@ int main(const unsigned long argc, const f_string_t *argv) { data.process_pipe = F_true; } - if (F_status_is_error(byte_dump_main(arguments, &data))) { + const f_status_t status = byte_dump_main(arguments, &data); + + // close all open file descriptors. + close(f_type_descriptor_output); + close(f_type_descriptor_input); + close(f_type_descriptor_error); + + if (F_status_is_error(status)) { return 1; } diff --git a/level_3/control/c/control.h b/level_3/control/c/control.h index 0be02a656..031111173 100644 --- a/level_3/control/c/control.h +++ b/level_3/control/c/control.h @@ -13,6 +13,7 @@ #ifndef _control_h // libc includes +#include // fll-0 includes #include diff --git a/level_3/control/c/main.c b/level_3/control/c/main.c index 27593416c..b0da32a95 100644 --- a/level_3/control/c/main.c +++ b/level_3/control/c/main.c @@ -8,7 +8,14 @@ int main(const unsigned long argc, const f_string_t *argv) { data.process_pipe = F_true; } - if (F_status_is_error(control_main(arguments, &data))) { + const f_status_t status = control_main(arguments, &data); + + // close all open file descriptors. + close(f_type_descriptor_output); + close(f_type_descriptor_input); + close(f_type_descriptor_error); + + if (F_status_is_error(status)) { return 1; } diff --git a/level_3/controller/c/main.c b/level_3/controller/c/main.c index 653a1e402..d9cde60ea 100644 --- a/level_3/controller/c/main.c +++ b/level_3/controller/c/main.c @@ -10,7 +10,14 @@ int main(const unsigned long argc, const f_string_t *argv) { data.pid = getpid(); - if (F_status_is_error(controller_main(arguments, &data))) { + const f_status_t status = controller_main(arguments, &data); + + // close all open file descriptors. + close(f_type_descriptor_output); + close(f_type_descriptor_input); + close(f_type_descriptor_error); + + if (F_status_is_error(status)) { return 1; } diff --git a/level_3/fake/c/main.c b/level_3/fake/c/main.c index 5d612b00b..bf9a47ed4 100644 --- a/level_3/fake/c/main.c +++ b/level_3/fake/c/main.c @@ -45,6 +45,11 @@ int main(const unsigned long argc, const f_string_t *argv) { f_signal_close(&data.signal); + // close all open file descriptors. + close(f_type_descriptor_output); + close(f_type_descriptor_input); + close(f_type_descriptor_error); + if (F_status_is_error(status)) { return 1; } diff --git a/level_3/firewall/c/firewall.h b/level_3/firewall/c/firewall.h index 40797fbf5..51b5a13e7 100644 --- a/level_3/firewall/c/firewall.h +++ b/level_3/firewall/c/firewall.h @@ -15,6 +15,7 @@ #include #include #include +#include // fll-0 includes #include diff --git a/level_3/fss_basic_list_read/c/fss_basic_list_read.h b/level_3/fss_basic_list_read/c/fss_basic_list_read.h index 2925fa58f..7ce5951f5 100644 --- a/level_3/fss_basic_list_read/c/fss_basic_list_read.h +++ b/level_3/fss_basic_list_read/c/fss_basic_list_read.h @@ -18,6 +18,7 @@ #include #include #include +#include // fll-0 includes #include diff --git a/level_3/fss_basic_list_read/c/main.c b/level_3/fss_basic_list_read/c/main.c index 8bc7bb7c8..c7119c89e 100644 --- a/level_3/fss_basic_list_read/c/main.c +++ b/level_3/fss_basic_list_read/c/main.c @@ -8,7 +8,14 @@ int main(const unsigned long argc, const f_string_t *argv) { data.process_pipe = F_true; } - if (F_status_is_error(fss_basic_list_read_main(arguments, &data))) { + const f_status_t status = fss_basic_list_read_main(arguments, &data); + + // close all open file descriptors. + close(f_type_descriptor_output); + close(f_type_descriptor_input); + close(f_type_descriptor_error); + + if (F_status_is_error(status)) { return 1; } diff --git a/level_3/fss_basic_list_write/c/fss_basic_list_write.h b/level_3/fss_basic_list_write/c/fss_basic_list_write.h index c3cf3d2b4..091c45282 100644 --- a/level_3/fss_basic_list_write/c/fss_basic_list_write.h +++ b/level_3/fss_basic_list_write/c/fss_basic_list_write.h @@ -13,6 +13,7 @@ #include #include #include +#include // fll-0 includes #include diff --git a/level_3/fss_basic_list_write/c/main.c b/level_3/fss_basic_list_write/c/main.c index d7b0ee0cd..8821ae6ca 100644 --- a/level_3/fss_basic_list_write/c/main.c +++ b/level_3/fss_basic_list_write/c/main.c @@ -8,7 +8,14 @@ int main(const unsigned long argc, const f_string_t *argv) { data.process_pipe = F_true; } - if (F_status_is_error(fss_basic_list_write_main(arguments, &data))) { + const f_status_t status = fss_basic_list_write_main(arguments, &data); + + // close all open file descriptors. + close(f_type_descriptor_output); + close(f_type_descriptor_input); + close(f_type_descriptor_error); + + if (F_status_is_error(status)) { return 1; } diff --git a/level_3/fss_basic_read/c/fss_basic_read.h b/level_3/fss_basic_read/c/fss_basic_read.h index 8613c1493..c473b13e8 100644 --- a/level_3/fss_basic_read/c/fss_basic_read.h +++ b/level_3/fss_basic_read/c/fss_basic_read.h @@ -18,6 +18,7 @@ #include #include #include +#include // fll-0 includes #include diff --git a/level_3/fss_basic_read/c/main.c b/level_3/fss_basic_read/c/main.c index 8c53a8c3a..525f9a868 100644 --- a/level_3/fss_basic_read/c/main.c +++ b/level_3/fss_basic_read/c/main.c @@ -8,7 +8,14 @@ int main(const unsigned long argc, const f_string_t *argv) { data.process_pipe = F_true; } - if (F_status_is_error(fss_basic_read_main(arguments, &data))) { + const f_status_t status = fss_basic_read_main(arguments, &data); + + // close all open file descriptors. + close(f_type_descriptor_output); + close(f_type_descriptor_input); + close(f_type_descriptor_error); + + if (F_status_is_error(status)) { return 1; } diff --git a/level_3/fss_basic_write/c/fss_basic_write.h b/level_3/fss_basic_write/c/fss_basic_write.h index 137a743cb..086d6ff80 100644 --- a/level_3/fss_basic_write/c/fss_basic_write.h +++ b/level_3/fss_basic_write/c/fss_basic_write.h @@ -13,6 +13,7 @@ #include #include #include +#include // fll-0 includes #include diff --git a/level_3/fss_basic_write/c/main.c b/level_3/fss_basic_write/c/main.c index 8a52fc72f..3e3b56b27 100644 --- a/level_3/fss_basic_write/c/main.c +++ b/level_3/fss_basic_write/c/main.c @@ -8,7 +8,14 @@ int main(const unsigned long argc, const f_string_t *argv) { data.process_pipe = F_true; } - if (F_status_is_error(fss_basic_write_main(arguments, &data))) { + const f_status_t status = fss_basic_write_main(arguments, &data); + + // close all open file descriptors. + close(f_type_descriptor_output); + close(f_type_descriptor_input); + close(f_type_descriptor_error); + + if (F_status_is_error(status)) { return 1; } diff --git a/level_3/fss_embedded_list_read/c/fss_embedded_list_read.h b/level_3/fss_embedded_list_read/c/fss_embedded_list_read.h index 255c83d2c..09a09da55 100644 --- a/level_3/fss_embedded_list_read/c/fss_embedded_list_read.h +++ b/level_3/fss_embedded_list_read/c/fss_embedded_list_read.h @@ -18,6 +18,7 @@ #include #include #include +#include // fll-0 includes #include diff --git a/level_3/fss_embedded_list_read/c/main.c b/level_3/fss_embedded_list_read/c/main.c index 904d21f24..7cd347c70 100644 --- a/level_3/fss_embedded_list_read/c/main.c +++ b/level_3/fss_embedded_list_read/c/main.c @@ -8,7 +8,14 @@ int main(const unsigned long argc, const f_string_t *argv) { data.process_pipe = F_true; } - if (F_status_is_error(fss_embedded_list_read_main(arguments, &data))) { + const f_status_t status = fss_embedded_list_read_main(arguments, &data); + + // close all open file descriptors. + close(f_type_descriptor_output); + close(f_type_descriptor_input); + close(f_type_descriptor_error); + + if (F_status_is_error(status)) { return 1; } diff --git a/level_3/fss_embedded_list_write/c/fss_embedded_list_write.h b/level_3/fss_embedded_list_write/c/fss_embedded_list_write.h index c3df67146..9e5738896 100644 --- a/level_3/fss_embedded_list_write/c/fss_embedded_list_write.h +++ b/level_3/fss_embedded_list_write/c/fss_embedded_list_write.h @@ -13,6 +13,7 @@ #include #include #include +#include // fll-0 includes #include diff --git a/level_3/fss_embedded_list_write/c/main.c b/level_3/fss_embedded_list_write/c/main.c index 7db718981..d194dfba0 100644 --- a/level_3/fss_embedded_list_write/c/main.c +++ b/level_3/fss_embedded_list_write/c/main.c @@ -8,7 +8,14 @@ int main(const unsigned long argc, const f_string_t *argv) { data.process_pipe = F_true; } - if (F_status_is_error(fss_embedded_list_write_main(arguments, &data))) { + const f_status_t status = fss_embedded_list_write_main(arguments, &data); + + // close all open file descriptors. + close(f_type_descriptor_output); + close(f_type_descriptor_input); + close(f_type_descriptor_error); + + if (F_status_is_error(status)) { return 1; } diff --git a/level_3/fss_extended_list_read/c/fss_extended_list_read.h b/level_3/fss_extended_list_read/c/fss_extended_list_read.h index 71a87713b..62f9d89b9 100644 --- a/level_3/fss_extended_list_read/c/fss_extended_list_read.h +++ b/level_3/fss_extended_list_read/c/fss_extended_list_read.h @@ -18,6 +18,7 @@ #include #include #include +#include // fll-0 includes #include diff --git a/level_3/fss_extended_list_read/c/main.c b/level_3/fss_extended_list_read/c/main.c index a53a2496f..c1d03831f 100644 --- a/level_3/fss_extended_list_read/c/main.c +++ b/level_3/fss_extended_list_read/c/main.c @@ -8,7 +8,14 @@ int main(const unsigned long argc, const f_string_t *argv) { data.process_pipe = F_true; } - if (F_status_is_error(fss_extended_list_read_main(arguments, &data))) { + const f_status_t status = fss_extended_list_read_main(arguments, &data); + + // close all open file descriptors. + close(f_type_descriptor_output); + close(f_type_descriptor_input); + close(f_type_descriptor_error); + + if (F_status_is_error(status)) { return 1; } diff --git a/level_3/fss_extended_list_write/c/fss_extended_list_write.h b/level_3/fss_extended_list_write/c/fss_extended_list_write.h index 791f2254f..fc4151b2b 100644 --- a/level_3/fss_extended_list_write/c/fss_extended_list_write.h +++ b/level_3/fss_extended_list_write/c/fss_extended_list_write.h @@ -13,6 +13,7 @@ #include #include #include +#include // fll-0 includes #include diff --git a/level_3/fss_extended_list_write/c/main.c b/level_3/fss_extended_list_write/c/main.c index 2360d4d2c..d543498b1 100644 --- a/level_3/fss_extended_list_write/c/main.c +++ b/level_3/fss_extended_list_write/c/main.c @@ -8,7 +8,14 @@ int main(const unsigned long argc, const f_string_t *argv) { data.process_pipe = F_true; } - if (F_status_is_error(fss_extended_list_write_main(arguments, &data))) { + const f_status_t status = fss_extended_list_write_main(arguments, &data); + + // close all open file descriptors. + close(f_type_descriptor_output); + close(f_type_descriptor_input); + close(f_type_descriptor_error); + + if (F_status_is_error(status)) { return 1; } diff --git a/level_3/fss_extended_read/c/fss_extended_read.h b/level_3/fss_extended_read/c/fss_extended_read.h index ab106beec..61263503a 100644 --- a/level_3/fss_extended_read/c/fss_extended_read.h +++ b/level_3/fss_extended_read/c/fss_extended_read.h @@ -18,6 +18,7 @@ #include #include #include +#include // fll-0 includes #include diff --git a/level_3/fss_extended_read/c/main.c b/level_3/fss_extended_read/c/main.c index d1a3e10fb..d9c3ea902 100644 --- a/level_3/fss_extended_read/c/main.c +++ b/level_3/fss_extended_read/c/main.c @@ -8,7 +8,14 @@ int main(const unsigned long argc, const f_string_t *argv) { data.process_pipe = F_true; } - if (F_status_is_error(fss_extended_read_main(arguments, &data))) { + const f_status_t status = fss_extended_read_main(arguments, &data); + + // close all open file descriptors. + close(f_type_descriptor_output); + close(f_type_descriptor_input); + close(f_type_descriptor_error); + + if (F_status_is_error(status)) { return 1; } diff --git a/level_3/fss_extended_write/c/fss_extended_write.h b/level_3/fss_extended_write/c/fss_extended_write.h index 2f674fc6e..9b94f5d32 100644 --- a/level_3/fss_extended_write/c/fss_extended_write.h +++ b/level_3/fss_extended_write/c/fss_extended_write.h @@ -13,6 +13,7 @@ #include #include #include +#include // fll-0 includes #include diff --git a/level_3/fss_extended_write/c/main.c b/level_3/fss_extended_write/c/main.c index 5f78046cd..4eee1d6c9 100644 --- a/level_3/fss_extended_write/c/main.c +++ b/level_3/fss_extended_write/c/main.c @@ -8,7 +8,14 @@ int main(const unsigned long argc, const f_string_t *argv) { data.process_pipe = F_true; } - if (F_status_is_error(fss_extended_write_main(arguments, &data))) { + const f_status_t status = fss_extended_write_main(arguments, &data); + + // close all open file descriptors. + close(f_type_descriptor_output); + close(f_type_descriptor_input); + close(f_type_descriptor_error); + + if (F_status_is_error(status)) { return 1; } diff --git a/level_3/fss_status_code/c/fss_status_code.h b/level_3/fss_status_code/c/fss_status_code.h index c3dccd560..20af5677e 100644 --- a/level_3/fss_status_code/c/fss_status_code.h +++ b/level_3/fss_status_code/c/fss_status_code.h @@ -13,6 +13,7 @@ #include #include #include +#include // fll-0 includes #include diff --git a/level_3/fss_status_code/c/main.c b/level_3/fss_status_code/c/main.c index 765f96f5d..a668c81ee 100644 --- a/level_3/fss_status_code/c/main.c +++ b/level_3/fss_status_code/c/main.c @@ -10,6 +10,11 @@ int main(const unsigned long argc, const f_string_t *argv) { const f_status_t status = fss_status_code_main(arguments, &data); + // close all open file descriptors. + close(f_type_descriptor_output); + close(f_type_descriptor_input); + close(f_type_descriptor_error); + if (F_status_is_error(status) || status == F_false) { return 1; } diff --git a/level_3/iki_read/c/iki_read.h b/level_3/iki_read/c/iki_read.h index bdde2b858..23c1a9eda 100644 --- a/level_3/iki_read/c/iki_read.h +++ b/level_3/iki_read/c/iki_read.h @@ -19,6 +19,7 @@ #include #include #include +#include // fll-0 includes #include diff --git a/level_3/iki_read/c/main.c b/level_3/iki_read/c/main.c index d0c40933e..0a7f6b4db 100644 --- a/level_3/iki_read/c/main.c +++ b/level_3/iki_read/c/main.c @@ -8,7 +8,14 @@ int main(const unsigned long argc, const f_string_t *argv) { data.process_pipe = F_true; } - if (F_status_is_error(iki_read_main(arguments, &data))) { + const f_status_t status = iki_read_main(arguments, &data); + + // close all open file descriptors. + close(f_type_descriptor_output); + close(f_type_descriptor_input); + close(f_type_descriptor_error); + + if (F_status_is_error(status)) { return 1; } diff --git a/level_3/iki_write/c/iki_write.h b/level_3/iki_write/c/iki_write.h index 9d371fb3a..1bddce4bf 100644 --- a/level_3/iki_write/c/iki_write.h +++ b/level_3/iki_write/c/iki_write.h @@ -19,6 +19,7 @@ #include #include #include +#include // fll-0 includes #include diff --git a/level_3/iki_write/c/main.c b/level_3/iki_write/c/main.c index f86f945ec..08a68b7c4 100644 --- a/level_3/iki_write/c/main.c +++ b/level_3/iki_write/c/main.c @@ -8,7 +8,14 @@ int main(const unsigned long argc, const f_string_t *argv) { data.process_pipe = F_true; } - if (F_status_is_error(iki_write_main(arguments, &data))) { + const f_status_t status = iki_write_main(arguments, &data); + + // close all open file descriptors. + close(f_type_descriptor_output); + close(f_type_descriptor_input); + close(f_type_descriptor_error); + + if (F_status_is_error(status)) { return 1; } diff --git a/level_3/init/c/init.h b/level_3/init/c/init.h index f28bf2dbe..84979cb23 100644 --- a/level_3/init/c/init.h +++ b/level_3/init/c/init.h @@ -20,6 +20,7 @@ // libc includes #include +#include // fll-0 includes #include diff --git a/level_3/init/c/main.c b/level_3/init/c/main.c index e6fe0306b..cd1282bdb 100644 --- a/level_3/init/c/main.c +++ b/level_3/init/c/main.c @@ -3,7 +3,6 @@ int main(const unsigned long argc, const f_string_t *argv) { const f_console_arguments_t arguments = { argc, argv }; init_data_t data = init_data_initialize; - f_status_t status = F_none; f_signal_set_empty(&data.signal.set); f_signal_set_add(F_signal_abort, &data.signal.set); @@ -25,10 +24,15 @@ int main(const unsigned long argc, const f_string_t *argv) { // restore umask. umask(data.umask); - status = init_main(arguments, &data); + const f_status_t status = init_main(arguments, &data); f_signal_close(&data.signal); + // close all open file descriptors. + close(f_type_descriptor_output); + close(f_type_descriptor_input); + close(f_type_descriptor_error); + if (F_status_is_error(status)) { return 1; } diff --git a/level_3/status_code/c/main.c b/level_3/status_code/c/main.c index 19775d18d..1126a8882 100644 --- a/level_3/status_code/c/main.c +++ b/level_3/status_code/c/main.c @@ -10,6 +10,11 @@ int main(const unsigned long argc, const f_string_t *argv) { const f_status_t status = status_code_main(arguments, &data); + // close all open file descriptors. + close(f_type_descriptor_output); + close(f_type_descriptor_input); + close(f_type_descriptor_error); + if (F_status_is_error(status) || status == F_false) { return 1; } diff --git a/level_3/status_code/c/status_code.h b/level_3/status_code/c/status_code.h index 7d146541e..ab1222507 100644 --- a/level_3/status_code/c/status_code.h +++ b/level_3/status_code/c/status_code.h @@ -13,6 +13,7 @@ #include #include #include +#include // fll-0 includes #include