]> Kevux Git Server - fll/commitdiff
Update: Partially move program data into the main for controller.
authorKevin Day <thekevinday@gmail.com>
Thu, 31 Mar 2022 03:42:23 +0000 (22:42 -0500)
committerKevin Day <thekevinday@gmail.com>
Thu, 31 Mar 2022 03:42:23 +0000 (22:42 -0500)
This does not use fll_program_data.
The controller needs a more complex structure than the one provided by fll_program_data.

The parts that can be moved are moved to be more consistent with other FLL provided programs.

level_3/controller/c/common.h
level_3/controller/c/controller.c
level_3/controller/c/main.c

index 247b87feb06164f03530cc6490cad48b26d2dc3e..2de0e396d858cba93ed2918dfad3f6759ca26281 100644 (file)
@@ -324,14 +324,22 @@ extern "C" {
 /**
  * The main program data.
  *
- * parameters:   The state of pre-defined parameters passed to the program.
- * remaining:    The remaining, non-pre-defined parameters, passed to the program.
- * process_pipe: Designate whether or not to process the input pipe.
- * output:       The output file for general printing.
- * error:        The output file for error printing.
- * warning:      The output file for warning printing.
- * signal:       The process signal management structure.
- * context:      The color context.
+ * child:                Reserved for a child process, often representing the child return status or the child process ID.
+ * context:              The color context.
+ * default_path_setting: The default setting path.
+ * default_path_pid:     The default PID file path.
+ * default_path_socket:  The default socket file path.
+ * error:                The output file for error printing.
+ * as_init:              Designate whether or not this is running as an init program.
+ * output:               The output file for general printing.
+ * parameters:           The state of pre-defined parameters passed to the program.
+ * pid:                  The PID of the program.
+ * process_pipe:         Designate whether or not to process the input pipe.
+ * program_name:         The name of the program.
+ * program_name_long:    The long name of the program.
+ * signal:               The process signal management structure.
+ * umask:                The umask settings, needed for avoiding calls to umask() to read the current umask.
+ * warning:              The output file for warning printing.
  */
 #ifndef _di_controller_main_t_
   typedef struct {
@@ -620,8 +628,6 @@ extern "C" {
 /**
  * Deallocate main.
  *
- * Be sure to call this after executing controller_main().
- *
  * If main.signal is non-zero, then this blocks and handles the following signals:
  *   - F_signal_abort
  *   - F_signal_broken_pipe
@@ -637,8 +643,6 @@ extern "C" {
  *   F_none on success.
  *
  *   Status codes (with error bit) are returned on any problem.
- *
- * @see controller_main()
  */
 #ifndef _di_controller_main_delete_
   extern f_status_t controller_main_delete(controller_main_t * const main);
index 583e33abc2ca9ab2b461dd25702f1ceaacb1123b..ee4560ca12fe1acee1180bd94116716996bc08e0 100644 (file)
@@ -68,10 +68,6 @@ extern "C" {
 
     f_status_t status = F_none;
 
-    f_console_parameter_t parameters[] = controller_console_parameter_t_initialize;
-    main->parameters.array = parameters;
-    main->parameters.used = controller_total_parameters_d;
-
     {
       f_console_parameter_id_t ids[3] = { controller_parameter_no_color_e, controller_parameter_light_e, controller_parameter_dark_e };
       const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3);
@@ -104,8 +100,6 @@ extern "C" {
           fll_print_dynamic_raw(f_string_eol_s, main->error.to.stream);
         }
 
-        controller_main_delete(main);
-
         return F_status_set_error(status);
       }
     }
@@ -117,12 +111,7 @@ extern "C" {
       const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 4);
 
       status = f_console_parameter_prioritize_right(main->parameters, choices, &choice);
-
-      if (F_status_is_error(status)) {
-        controller_main_delete(main);
-
-        return status;
-      }
+      if (F_status_is_error(status)) return status;
 
       if (choice == controller_parameter_verbosity_quiet_e) {
         main->output.verbosity = f_console_verbosity_quiet_e;
@@ -153,8 +142,6 @@ extern "C" {
     if (main->parameters.array[controller_parameter_help_e].result == f_console_result_found_e) {
       controller_print_help(main);
 
-      controller_main_delete(main);
-
       return F_none;
     }
 
@@ -165,8 +152,6 @@ extern "C" {
 
       controller_unlock_print_flush(main->output.to, 0);
 
-      controller_main_delete(main);
-
       return F_none;
     }
 
@@ -189,8 +174,6 @@ extern "C" {
     if (F_status_is_error(status)) {
       fll_error_print(main->error, F_status_set_fine(status), "f_string_dynamic_append", F_true);
 
-      controller_main_delete(main);
-
       return status;
     }
 
@@ -470,7 +453,6 @@ extern "C" {
     }
 
     controller_setting_delete_simple(&setting);
-    controller_main_delete(main);
 
     if (status == F_child) {
       return status;
index 376f31b770d840dd5ab86dcf0df2718d55f41629..4c31e5a91943ddee95e8c8dba65d7b4191fa6c7c 100644 (file)
@@ -5,6 +5,10 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
   const f_console_arguments_t arguments = macro_f_console_arguments_t_initialize(argc, argv, envp);
   controller_main_t data = controller_main_t_initialize;
 
+  f_console_parameter_t parameters[] = controller_console_parameter_t_initialize;
+  data.parameters.array = parameters;
+  data.parameters.used = controller_total_parameters_d;
+
   if (f_pipe_input_exists()) {
     data.process_pipe = F_true;
   }
@@ -34,6 +38,8 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
 
   const f_status_t status = controller_main(&data, &arguments);
 
+  controller_main_delete(&data);
+
   fll_program_standard_setdown(&data.signal);
 
   // When the child process exits, it must return the code to the parent so the parent knows how to handle the exit.