]> Kevux Git Server - fll/commitdiff
Bugfix: Console parameter processing should handle unknown parameters with -/+ as...
authorKevin Day <thekevinday@gmail.com>
Thu, 2 Sep 2021 03:33:28 +0000 (22:33 -0500)
committerKevin Day <thekevinday@gmail.com>
Thu, 2 Sep 2021 03:33:28 +0000 (22:33 -0500)
If the parameters are not found, then they should be added to the "remaining" set.
This allows unknown parameters to be used as regular parameters.

This is easily seen when using status_code or fss_status_code and attempting to pass a negative number, such as -200.
While -200 should be an out of range error for these programs, it is instead silently ignored.
Given that there is no reserved parameter with -200, then the -200 can be used normally.

There should also be a way to explicitly designate that all remaining parameters are processed as "remaining".
Add a comment by this.
There may also need to be a way to escape these parameters as an alternative.
Such changes are left to another time.

level_0/f_console/c/console.c
level_0/f_console/c/console.h

index 1ee4318b4f4a177aa5306c09b9f42d235cc207bf..d7669e0ef13ea0f66a9db181501a5f170a70e5bf 100644 (file)
@@ -137,6 +137,8 @@ extern "C" {
         console_short = f_console_none;
       }
 
+      found = F_false;
+
       if (console_short != f_console_none) {
 
         // The sub_location is used on a per increment basis (such as 'tar -xcf', the '-' would have an increment of 1, therefore x, c, and f would all be three separate parameters).
@@ -144,9 +146,7 @@ extern "C" {
 
           for (i = 0; i < parameters.used; ++i) {
 
-            if (parameters.parameter[i].type != console_type) {
-              continue;
-            }
+            if (parameters.parameter[i].type != console_type) continue;
 
             if (result == console_short) {
               if (!parameters.parameter[i].symbol_short) continue;
@@ -216,6 +216,8 @@ extern "C" {
               return status;
             }
 
+            found = F_true;
+
             parameters.parameter[i].locations.array[parameters.parameter[i].locations.used++] = location;
 
             parameters.parameter[i].result = f_console_result_found;
@@ -253,8 +255,6 @@ extern "C" {
         } // while
       }
       else {
-        found = F_false;
-
         for (i = 0; i < parameters.used; ++i) {
 
           if (parameters.parameter[i].type != f_console_type_other) continue;
@@ -305,20 +305,21 @@ extern "C" {
           found = F_true;
           break;
         } // for
+      }
 
-        if (!found) {
+      if (!found) {
 
-          // populate list of remaining parameters.parameter not associated with anything.
-          if (remaining->used == remaining->size) {
-            macro_f_memory_structure_increment(status, (*remaining), 1, f_memory_default_allocation_small, macro_f_array_lengths_t_resize, F_array_too_large);
-            if (F_status_is_error(status)) {
-              macro_f_array_lengths_t_delete_simple(needs_value);
-              return status;
-            }
-          }
+        // populate list of remaining parameters.parameter not associated with anything.
+        if (remaining->used == remaining->size) {
+          macro_f_memory_structure_increment(status, (*remaining), 1, f_memory_default_allocation_small, macro_f_array_lengths_t_resize, F_array_too_large);
 
-          remaining->array[remaining->used++] = location;
+          if (F_status_is_error(status)) {
+            macro_f_array_lengths_t_delete_simple(needs_value);
+            return status;
+          }
         }
+
+        remaining->array[remaining->used++] = location;
       }
 
       ++location;
index 6316161734408925b880f0dba0590ea24ffaabdf..f4569a9783d2c44d172b01c37b88c67832d8fbd1 100644 (file)
@@ -6,6 +6,9 @@
  * Licenses: lgplv2.1
  *
  * Some console input/output commands.
+ *
+ * @todo It may be a good idea to provide a standard parameter process process disable sequence.
+ *       This does not yet exist, so "--help" would always be a parameter, but would if there was something like "-/ --help" where this help does not designate the help option?
  */
 #ifndef _F_console_h
 #define _F_console_h