changeset 720:47620b3c1080

farray.sh: Provide extra arguments that may be forwarded to all the "for each"-callbacks
author Franz Glasner <fzglas.hg@dom66.de>
date Sat, 05 Oct 2024 14:46:29 +0200
parents b2757e72b517
children 63fd0e235c1e
files share/local-bsdtools/farray.sh
diffstat 1 files changed, 15 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/share/local-bsdtools/farray.sh	Fri Oct 04 23:18:10 2024 +0200
+++ b/share/local-bsdtools/farray.sh	Sat Oct 05 14:46:29 2024 +0200
@@ -1454,12 +1454,15 @@
 #: - the array name
 #: - the current index
 #: - the element value at the current index
+#: - all the extra arguments (`$3`, `$4`, ...) given as arguments are
+#:   forwarded also
 #:
 #: The iteration stops if the called function returns a falsy value.
 #:
 #: Args:
 #:   $1 (str): The name of an existing array.
 #:   $2 (str): The name of a function to be called with three arguments.
+#:   $3... (optional): Extra arguments forwared to `$2` also
 #:
 #: Warning:
 #:   If the number of elements changes while being in `farray_for_each` then
@@ -1477,9 +1480,11 @@
     __farr_callback="${2-}"
     [ -z "${__farr_callback}" ] && _farr_fatal "missing callback function name"
 
+    shift 2
+
     __farr_idx=1
     while [ ${__farr_idx} -le ${__farr_len} ]; do
-	eval "${__farr_callback} ${__farr_name} ${__farr_idx} \"\${${__farr_gvrname}_${__farr_idx}}\""
+	eval "${__farr_callback} ${__farr_name} ${__farr_idx} \"\${${__farr_gvrname}_${__farr_idx}}\" \"\$@\""
 	__farr_rv=$?
 	[ ${__farr_rv} -ne 0 ] && return ${__farr_rv}
 	__farr_idx=$((__farr_idx + 1))
@@ -1500,9 +1505,11 @@
     __farr_callback="${2-}"
     [ -z "${__farr_callback}" ] && _farr_fatal "missing callback function name"
 
+    shift 2
+
     __farr_idx=${__farr_len}
     while [ ${__farr_idx} -gt 0 ]; do
-	eval "${__farr_callback} ${__farr_name} ${__farr_idx} \"\${${__farr_gvrname}_${__farr_idx}}\""
+	eval "${__farr_callback} ${__farr_name} ${__farr_idx} \"\${${__farr_gvrname}_${__farr_idx}}\" \"\$@\""
 	__farr_rv=$?
 	[ ${__farr_rv} -ne 0 ] && return ${__farr_rv}
 	__farr_idx=$((__farr_idx - 1))
@@ -2775,12 +2782,15 @@
 #: - the element key at the current index
 #: - the element value at the current index
 #: - the current index
+#: - all the extra arguments (`$3`, `$4`, ...) given as arguments are
+#:   forwarded also
 #:
 #: The iteration stops if the called function returns a falsy value.
 #:
 #: Args:
 #:   $1 (str): The name of an existing array.
 #:   $2 (str): The name of a function to be called with four arguments.
+#:   $3... (optional): Extra arguments forwared to `$2` also
 #:
 #: Warning:
 #:   If the number of elements changes while being in `falist_for_each` then
@@ -2798,6 +2808,8 @@
     __farr_callback="${2-}"
     [ -z "${__farr_callback}" ] && _farr_fatal "missing callback function name"
 
+    shift 2
+
     __farr_feidx=1
     while [ ${__farr_feidx} -le ${__farr_len} ]; do
         eval __farr_fekey=\"\$\{${__farr_keyname}_${__farr_feidx}+SET\}\"
@@ -2806,7 +2818,7 @@
             eval __farr_feval=\"\$\{${__farr_valname}_${__farr_feidx}+SET\}\"
             if [ -n "${__farr_feval}" ]; then
                 eval __farr_feval=\"\$\{${__farr_valname}_${__farr_feidx}\}\"
-                eval "${__farr_callback} ${__farr_name} \"\${__farr_fekey}\" \"\${__farr_feval}\" ${__farr_feidx}"
+                eval "${__farr_callback} ${__farr_name} \"\${__farr_fekey}\" \"\${__farr_feval}\" ${__farr_feidx} \"\$@\""
                 __farr_rv=$?
                 [ ${__farr_rv} -ne 0 ] && return ${__farr_rv}
             else