]> Kevux Git Server - fll/commitdiff
Bugfix: A Rule's "define" settings are not being exported. 0.5.8
authorKevin Day <thekevinday@gmail.com>
Sun, 27 Feb 2022 01:33:59 +0000 (19:33 -0600)
committerKevin Day <thekevinday@gmail.com>
Sun, 27 Feb 2022 01:33:59 +0000 (19:33 -0600)
The exporting of the define is never performed and needs to be.
This is a quick implementation.
I've added a TODO describing what I really want to do.
The improved implementation is to be addressed after the FLL-0.5.8 release.

level_3/controller/c/rule/private-rule.c
level_3/controller/c/rule/private-rule.h

index d443400e6c8be863e362c957aa8af27ecf3c6668..a9de5c53acc7a9e5ba5e5357656a2c8bf5dfd8c9 100644 (file)
@@ -922,10 +922,10 @@ extern "C" {
     status = f_string_dynamic_append(source.script, &destination->script);
     if (F_status_is_error(status)) return status;
 
-    status = f_string_maps_append(source.define, &destination->define);
+    status = f_string_maps_append_all(source.define, &destination->define);
     if (F_status_is_error(status)) return status;
 
-    status = f_string_maps_append(source.parameter, &destination->parameter);
+    status = f_string_maps_append_all(source.parameter, &destination->parameter);
     if (F_status_is_error(status)) return status;
 
     status = f_string_dynamics_append(source.environment, &destination->environment);
@@ -1131,6 +1131,47 @@ extern "C" {
       return status;
     }
 
+    // @todo Much of this loop really should be moved into the processing stage where define names that are not in the environment are not loaded (for better performance and resource utilization).
+    // When a "define" is in the "environment", add it to the exported environments (and overwrite any existing environment variable of the same name).
+    for (i = 0; i < process->rule.define.used; ++i) {
+
+      for (j = 0; j < process->rule.environment.used; ++j) {
+
+        if (fl_string_dynamic_compare(process->rule.define.array[i].name, process->rule.environment.array[j]) == F_equal_to) {
+
+          for (k = 0; k < environment.used; ++k) {
+
+            if (fl_string_dynamic_compare(process->rule.define.array[i].name, environment.array[k].name) == F_equal_to) {
+
+              environment.array[k].value.used = 0;
+
+              status = f_string_dynamic_append(process->rule.define.array[i].value, &environment.array[k].value);
+
+              if (F_status_is_error(status)) {
+                controller_print_error(global.thread, global.main->error, F_status_set_fine(status), "f_string_dynamic_append", F_true);
+
+                return status;
+              }
+
+              break;
+            }
+          } // for
+
+          if (k == environment.used) {
+            status = f_string_maps_append(process->rule.define.array[i], &environment);
+
+            if (F_status_is_error(status)) {
+              controller_print_error(global.thread, global.main->error, F_status_set_fine(status), "f_string_maps_append", F_true);
+
+              return status;
+            }
+          }
+
+          break;
+        }
+      } // for
+    } // for
+
     for (i = 0; i < process->rule.items.used && controller_thread_is_enabled_process(process, global.thread); ++i) {
 
       if (process->rule.items.array[i].type == controller_rule_item_type_setting_e) continue;
index b28834a52e28d0cf40504de8e294ae1c824f3817..ced35c531eebcaef5c2cd05fb33bc9d05c128b93 100644 (file)
@@ -205,7 +205,7 @@ extern "C" {
  *   Errors (with error bit) from: f_limit_sets_copy().
  *   Errors (with error bit) from: f_string_dynamic_append().
  *   Errors (with error bit) from: f_string_dynamics_append().
- *   Errors (with error bit) from: f_string_maps_append().
+ *   Errors (with error bit) from: f_string_maps_append_all().
  *   Errors (with error bit) from: f_int32s_append().
  *
  *  @see f_capability_copy()
@@ -213,7 +213,7 @@ extern "C" {
  *  @see f_limit_sets_append()
  *  @see f_string_dynamic_append()
  *  @see f_string_dynamics_append()
- *  @see f_string_maps_append()
+ *  @see f_string_maps_append_all()
  *  @see f_int32s_append()
  */
 #ifndef _di_controller_rule_copy_