changeset 742:5ba94d373199

farray.sh: FIX: allow proper token value usage for farray_splice(), farray_merge(), falist_keys(), falist_values() and falist_items()
author Franz Glasner <fzglas.hg@dom66.de>
date Tue, 08 Oct 2024 09:52:29 +0200
parents 446c175cfb48
children 6fcf7da87981
files share/local-bsdtools/farray.sh tests/farray-array.t
diffstat 2 files changed, 27 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/share/local-bsdtools/farray.sh	Tue Oct 08 09:07:45 2024 +0200
+++ b/share/local-bsdtools/farray.sh	Tue Oct 08 09:52:29 2024 +0200
@@ -987,10 +987,12 @@
 #:     farray_splice "" ARRAY 1 1
 #:
 farray_splice() {
+    local __farr_del_array __farr_l_name __farr_index __farr_length
+    local __farr_r_name
+
     local __farr_del_name __farr_del_token __farr_del_gvrname __farr_del_len
-    local __farr_l_name __farr_l_token __farr_l_gvrname __farr_l_len
-    local __farr_index __farr_length
-    local __farr_r_name __farr_r_token __farr_r_gvrname __farr_r_len
+    local __farr_l_token __farr_l_gvrname __farr_l_len
+    local __farr_r_token __farr_r_gvrname __farr_r_len
 
     #
     # Dynamically scoped variables for _farr_array_tryget_meta_nonfatal()
@@ -1004,6 +1006,7 @@
 
     __farr_del_name=''
     if [ -n "${1}" ] && _farr_array_tryget_meta "${1}"; then
+        __farr_del_array="${1}"
         __farr_del_name="${__farr_name}"
         __farr_del_token="${__farr_token}"
         __farr_del_gvrname="${__farr_gvrname}"
@@ -1044,8 +1047,8 @@
         __farr_off=0
         while [ ${__farr_off} -lt ${__farr_length} ]; do
             eval __farr_v=\"\$\{${__farr_l_gvrname}_$((__farr_index + __farr_off))\}\"
-            if [ -n "${__farr_del_name}" ]; then
-                farray_append "${__farr_del_name}" "${__farr_v}"
+            if [ -n "${__farr_del_array}" ]; then
+                farray_append "${__farr_del_array}" "${__farr_v}"
             fi
             _farr_release_object "${__farr_v}"
             eval __farr_v=\"\$\{${__farr_r_gvrname}_$((__farr_off + 1))\}\"
@@ -1059,8 +1062,8 @@
         __farr_off=0
         while [ ${__farr_off} -lt ${__farr_r_len} ]; do
             eval __farr_v=\"\$\{${__farr_l_gvrname}_$((__farr_index + __farr_off))\}\"
-            if [ -n "${__farr_del_name}" ]; then
-                farray_append "${__farr_del_name}" "${__farr_v}"
+            if [ -n "${__farr_del_array}" ]; then
+                farray_append "${__farr_del_array}" "${__farr_v}"
             fi
             _farr_release_object "${__farr_v}"
             eval __farr_v=\"\$\{${__farr_r_gvrname}_$((__farr_off + 1))\}\"
@@ -1071,8 +1074,8 @@
         # Copy / unset the rest that is to delete
         while [ ${__farr_off} -lt ${__farr_length} ]; do
             eval __farr_v=\"\$\{${__farr_l_gvrname}_$((__farr_index + __farr_off))\}\"
-            if [ -n "${__farr_del_name}" ]; then
-                farray_append "${__farr_del_name}" "${__farr_v}"
+            if [ -n "${__farr_del_array}" ]; then
+                farray_append "${__farr_del_array}" "${__farr_v}"
             fi
             _farr_release_object "${__farr_v}"
             eval unset ${__farr_l_gvrname}_$((__farr_index + __farr_off))
@@ -1097,8 +1100,8 @@
         while [ ${__farr_off} -lt ${__farr_length} ]; do
             eval __farr_v=\"\$\{${__farr_l_gvrname}_$((__farr_index + __farr_off))\}\"
 
-            if [ -n "${__farr_del_name}" ]; then
-                farray_append "${__farr_del_name}" "${__farr_v}"
+            if [ -n "${__farr_del_array}" ]; then
+                farray_append "${__farr_del_array}" "${__farr_v}"
             fi
             _farr_release_object "${__farr_v}"
             eval __farr_v=\"\$\{${__farr_r_gvrname}_$((__farr_off + 1))\}\"
@@ -2854,10 +2857,10 @@
 #:   $2 (str): The name of the alist from where to get the keys.
 #:
 falist_keys() {
-    local __farr_l_name __farr_r_name
+    local __farr_l_result __farr_r_name
 
     local __farr_r_token __farr_r_objname __farr_r_keyname __farr_r_valname __farr_r_len
-    local __farr_l_token __farr_l_gvrname __farr_l_len
+    local __farr_l_name __farr_l_token __farr_l_gvrname __farr_l_len
 
     local __farr_name __farr_token __farr_gvrname __farr_objname
     local __farr_keyname __farr_valname __farr_len
@@ -2866,6 +2869,7 @@
     # Try to get the array metadata here to provide an early error message
     [ $# -lt 1 ] && _ferr_fatal "missing target array"
     _farr_array_get_meta "$1"
+    __farr_l_result="$1"
     __farr_l_name="${__farr_name}"
     __farr_l_token="${__farr_token}"
     __farr_l_gvrname="${__farr_gvrname}"
@@ -2884,7 +2888,7 @@
         eval __farr_key=\"\$\{${__farr_r_keyname}_${__farr_idx}+SET\}\"
         if [ -n "${__farr_key}" ]; then
             eval __farr_key=\"\$\{${__farr_r_keyname}_${__farr_idx}\}\"
-            farray_append "${__farr_l_name}" "${__farr_key}"
+            farray_append "${__farr_l_result}" "${__farr_key}"
         else
             _farr_fatal "alist \`${__farr_r_name}': missing key index"
         fi
@@ -2902,10 +2906,10 @@
 #:   $2 (str): The name of the alist from where to get the values.
 #:
 falist_values() {
-    local __farr_l_name __farr_r_name
+    local __farr_l_result __farr_r_name
 
     local __farr_r_token __farr_r_objname __farr_r_keyname __farr_r_valname __farr_r_len
-    local __farr_l_token __farr_l_gvrname __farr_l_len
+    local __farr_l_name __farr_l_token __farr_l_gvrname __farr_l_len
 
     local __farr_name __farr_token __farr_gvrname __farr_objname
     local __farr_keyname __farr_valname __farr_len
@@ -2914,6 +2918,7 @@
     # Try to get the array metadata here to provide an early error message
     [ $# -lt 1 ] && _ferr_fatal "missing target array"
     _farr_array_get_meta "$1"
+    __farr_l_result="$1"
     __farr_l_name="${__farr_name}"
     __farr_l_token="${__farr_token}"
     __farr_l_gvrname="${__farr_gvrname}"
@@ -2932,7 +2937,7 @@
         eval __farr_value=\"\$\{${__farr_r_valname}_${__farr_idx}+SET\}\"
         if [ -n "${__farr_value}" ]; then
             eval __farr_value=\"\$\{${__farr_r_valname}_${__farr_idx}\}\"
-            farray_append "${__farr_l_name}" "${__farr_value}"
+            farray_append "${__farr_l_result}" "${__farr_value}"
         else
             _farr_fatal "alist \`${__farr_r_name}': missing value index"
         fi
@@ -2951,10 +2956,10 @@
 #:   $2 (str): The name of the alist from where to get the items.
 #:
 falist_items() {
-    local __farr_l_name __farr_r_name
+    local __farr_l_result __farr_r_name
 
     local __farr_r_token __farr_r_objname __farr_r_keyname __farr_r_valname __farr_r_len
-    local __farr_l_token __farr_l_gvrname __farr_l_len
+    local __farr_l_name __farr_l_token __farr_l_gvrname __farr_l_len
 
     local __farr_name __farr_token __farr_gvrname __farr_objname
     local __farr_keyname __farr_valname __farr_len
@@ -2963,6 +2968,7 @@
     # Try to get the array metadata here to provide an early error message
     [ $# -lt 1 ] && _ferr_fatal "missing target array"
     _farr_array_get_meta "$1"
+    __farr_l_result="$1"
     __farr_l_name="${__farr_name}"
     __farr_l_token="${__farr_token}"
     __farr_l_gvrname="${__farr_gvrname}"
@@ -2984,7 +2990,7 @@
             eval __farr_value=\"\$\{${__farr_r_valname}_${__farr_idx}+SET\}\"
             if [ -n "${__farr_value}" ]; then
                 eval __farr_value=\"\$\{${__farr_r_valname}_${__farr_idx}\}\"
-                farray_append "${__farr_l_name}" "${__farr_key}" "${__farr_value}"
+                farray_append "${__farr_l_result}" "${__farr_key}" "${__farr_value}"
             else
                 _farr_fatal "alist \`${__farr_r_name}': missing value index"
             fi
--- a/tests/farray-array.t	Tue Oct 08 09:07:45 2024 +0200
+++ b/tests/farray-array.t	Tue Oct 08 09:52:29 2024 +0200
@@ -356,7 +356,7 @@
   $ farray_create DELETED
   $ farray_create INSERTED  ' I 1 ' ' I 2 ' ' I 3 '
   $ farray_create TEST ' v 1 ' ' v 2 ' ' v 3 ' ' v 4 ' ' v 5 ' ' v 6 ' ' v 7 ' ' v 8 '  ' v 9 '
-  $ farray_splice DELETED TEST 1 ""  INSERTED
+  $ farray_splice "$DELETED" TEST 1 ""  "$INSERTED"
   $ farray_debug DELETED
   DEBUG: array `DELETED' has length 9
   DEBUG:   the items: