Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
changeset 514:5da57fa5009f
array.sh: REFACTOR: Rename all local variables to have a __farr_ prefix.
This is to hinder name collisions when using "eval" with user-provided names -- many
of them may be common: _l, l, _i, i, _idx, idx.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Sun, 01 Sep 2024 13:58:01 +0200 |
| parents | fb4ee1fab046 |
| children | 7c2ffcc92df6 |
| files | share/local-bsdtools/array.sh |
| diffstat | 1 files changed, 183 insertions(+), 183 deletions(-) [+] |
line wrap: on
line diff
--- a/share/local-bsdtools/array.sh Sun Sep 01 11:58:21 2024 +0200 +++ b/share/local-bsdtools/array.sh Sun Sep 01 13:58:01 2024 +0200 @@ -94,24 +94,24 @@ #: Iff the array already exists. #: array_create() { - local _name + local __farr_name - local _gvrname _el _l + local __farr_gvrname __farr_el __farr_l [ $# -lt 1 ] && _farr_fatal "missing array name" - _name=$1 - _gvrname=${_farr_global_prefix}$1 + __farr_name=$1 + __farr_gvrname=${_farr_global_prefix}$1 shift # Check whether the variable already exists - eval _l=\${${_gvrname}__:-${_farr_unset}} + eval __farr_l=\${${__farr_gvrname}__:-${_farr_unset}} - [ "${_l}" != ${_farr_unset} ] && _farr_fatal "array \`${_name}' already exists" + [ "${__farr_l}" != ${_farr_unset} ] && _farr_fatal "array \`${__farr_name}' already exists" # Really create - eval ${_gvrname}__=0 + eval ${__farr_gvrname}__=0 - for _el in "$@"; do - array_append ${_name} "${_el}" + for __farr_el in "$@"; do + array_append ${__farr_name} "${__farr_el}" done } @@ -135,7 +135,6 @@ } - #: #: Get the length of an array and put it into a variable #: @@ -148,23 +147,23 @@ #: 1 (falsy) if the array does not exist #: array_length() { - local _varname _name + local __farr_varname __farr_name - local _gvrname _l + local __farr_gvrname __farr_l [ $# -lt 1 ] && _farr_fatal "missing variable name" - _varname=$1 + __farr_varname=$1 [ $# -lt 2 ] && _farr_fatal "missing array name" - _name=$2 - _gvrname=${_farr_global_prefix}$2 + __farr_name=$2 + __farr_gvrname=${_farr_global_prefix}$2 # Check whether the variable already exists - eval _l=\${${_gvrname}__:-${_farr_unset}} + eval __farr_l=\${${__farr_gvrname}__:-${_farr_unset}} - if [ "${_l}" = ${_farr_unset} ]; then + if [ "${__farr_l}" = ${_farr_unset} ]; then return 1 else - eval ${_varname}=${_l} + eval ${__farr_varname}=${__farr_l} return 0 fi } @@ -181,15 +180,15 @@ #: If the array does not exist the output is -1. #: array_print_length() { - local _name + local __farr_name - local _vn + local __farr_vn [ $# -lt 1 ] && _farr_fatal "missing array name" - _name=$1 + __farr_name=$1 - if array_length _vn ${_name}; then - printf "%s" "${_vn}" + if array_length __farr_vn ${__farr_name}; then + printf "%s" "${__farr_vn}" return 0 else printf "%s" "-1" @@ -207,33 +206,33 @@ #: will be appended. #: array_append() { - local _name _value + local __farr_name __farr_value - local _gvrname _l _l1 + local __farr_gvrname __farr_l __farr_l_1 [ $# -lt 1 ] && _farr_fatal "missing array name" - _name=$1 - _gvrname=${_farr_global_prefix}$1 - _value="${2-}" + __farr_name=$1 + __farr_gvrname=${_farr_global_prefix}$1 + __farr_value="${2-}" # Check whether the variable already exists - eval _l=\${${_gvrname}__:-${_farr_unset}} - if [ "${_l}" = ${_farr_unset} ]; then - _farr_fatal "array \`${_name}' does not exist" + eval __farr_l=\${${__farr_gvrname}__:-${_farr_unset}} + if [ "${__farr_l}" = ${_farr_unset} ]; then + _farr_fatal "array \`${__farr_name}' does not exist" fi - _l1=$((${_l} + 1)) + __farr_l_1=$((${__farr_l} + 1)) # # Set value # Escape properly: use $' ' and escape any backslashes and single quotes. # - eval ${_gvrname}_${_l1}=\$\'"$(_farr_quote_for_eval_dsq "${_value}")"\' + eval ${__farr_gvrname}_${__farr_l_1}=\$\'"$(_farr_quote_for_eval_dsq "${__farr_value}")"\' # the implementation below line does not escape properly - # eval ${_gvrname}_${_l1}="\"${_value}\"" + # eval ${__farr_gvrname}_${__farr_l_1}="\"${__farr_value}\"" # Set new array length - eval ${_gvrname}__=${_l1} + eval ${__farr_gvrname}__=${__farr_l_1} } @@ -251,34 +250,34 @@ #: is exactly the current length + 1. #: array_set() { - local _name _index _value + local __farr_name __farr_index __farr_value - local _gvrname _l _l1 + local __farr_gvrname __farr_l __farr_l_1 [ $# -lt 1 ] && _farr_fatal "missing array name" - _name=$1 - _gvrname=${_farr_global_prefix}$1 + __farr_name=$1 + __farr_gvrname=${_farr_global_prefix}$1 [ $# -lt 2 ] && _farr_fatal "missing array index" - _index=$2 - _value="${3-}" + __farr_index=$2 + __farr_value="${3-}" # Check whether the variable already exists - eval _l=\${${_gvrname}__:-${_farr_unset}} - if [ "${_l}" = ${_farr_unset} ]; then - _farr_fatal "array \`${_name}' does not exist" + eval __farr_l=\${${__farr_gvrname}__:-${_farr_unset}} + if [ "${__farr_l}" = ${_farr_unset} ]; then + _farr_fatal "array \`${__farr_name}' does not exist" fi # For proper quoting: see array_append - if [ \( ${_index} -ge 1 \) -a \( ${_index} -le ${_l} \) ]; then + if [ \( ${__farr_index} -ge 1 \) -a \( ${__farr_index} -le ${__farr_l} \) ]; then # replace a value at an existing index - eval ${_gvrname}_${_l}=\$\'"$(_farr_quote_for_eval_dsq "${_value}")"\' + eval ${__farr_gvrname}_${__farr_l}=\$\'"$(_farr_quote_for_eval_dsq "${__farr_value}")"\' else - _l1=$((${_l} + 1)) - if [ ${_index} -eq ${_l1} ]; then + __farr_l_1=$((${__farr_l} + 1)) + if [ ${__farr_index} -eq ${__farr_l_1} ]; then # append value - eval ${_gvrname}_${_l1}=\$\'"$(_farr_quote_for_eval_dsq "${_value}")"\' + eval ${__farr_gvrname}_${__farr_l_1}=\$\'"$(_farr_quote_for_eval_dsq "${__farr_value}")"\' # and set new length - eval ${_gvrname}__=${_l1} + eval ${__farr_gvrname}__=${__farr_l_1} else _farr_fatal "array index out of bounds (cannot create holes)" fi @@ -295,30 +294,30 @@ #: $3 (int): The index #: array_get() { - local _varname _name _index + local __farr_varname __farr_name __farr_index - local _gvrname _l _value + local __farr_gvrname __farr_l [ $# -lt 1 ] && _farr_fatal "missing variable name" - _varname=$1 + __farr_varname=$1 [ $# -lt 2 ] && _farr_fatal "missing array name" - _name=$2 - _gvrname=${_farr_global_prefix}$2 + __farr_name=$2 + __farr_gvrname=${_farr_global_prefix}$2 [ $# -lt 3 ] && _farr_fatal "missing array index" - _index=$3 + __farr_index=$3 # Check whether the variable already exists - eval _l=\${${_gvrname}__:-${_farr_unset}} - if [ "${_l}" = ${_farr_unset} ]; then - _farr_fatal "array \`${_name}' does not exist" + eval __farr_l=\${${__farr_gvrname}__:-${_farr_unset}} + if [ "${__farr_l}" = ${_farr_unset} ]; then + _farr_fatal "array \`${__farr_name}' does not exist" fi # check index range - if [ \( "${_index}" -lt 1 \) -o \( "${_index}" -gt ${_l} \) ]; then + if [ \( "${__farr_index}" -lt 1 \) -o \( "${__farr_index}" -gt ${__farr_l} \) ]; then _farr_fatal "array index out of bounds" fi - eval ${_varname}=\"\${${_gvrname}_${_index}}\" + eval ${__farr_varname}=\"\${${__farr_gvrname}_${__farr_index}}\" } @@ -339,30 +338,30 @@ #: fatal and call `_farr_fatal` (i.e. `exit`). #: array_tryget() { - local _varname _name _index + local __farr_varname __farr_name __farr_index - local _gvrname _l _value + local __farr_gvrname __farr_l [ $# -lt 1 ] && _farr_fatal "missing variable name" - _varname=$1 + __farr_varname=$1 [ $# -lt 2 ] && _farr_fatal "missing array name" - _name=$2 - _gvrname=${_farr_global_prefix}$2 + __farr_name=$2 + __farr_gvrname=${_farr_global_prefix}$2 [ $# -lt 3 ] && _farr_fatal "missing array index" - _index=$3 + __farr_index=$3 # Check whether the variable already exists - eval _l=\${${_gvrname}__:-${_farr_unset}} - if [ "${_l}" = ${_farr_unset} ]; then - _farr_fatal "array \`${_name}' does not exist" + eval __farr_l=\${${__farr_gvrname}__:-${_farr_unset}} + if [ "${__farr_l}" = ${_farr_unset} ]; then + _farr_fatal "array \`${__farr_name}' does not exist" fi # check index range - if [ \( "${_index}" -lt 1 \) -o \( "${_index}" -gt ${_l} \) ]; then + if [ \( "${__farr_index}" -lt 1 \) -o \( "${__farr_index}" -gt ${__farr_l} \) ]; then return 1 fi - eval ${_varname}=\"\${${_gvrname}_${_index}}\" + eval ${__farr_varname}=\"\${${__farr_gvrname}_${__farr_index}}\" return 0 } @@ -375,41 +374,42 @@ #: $2 (int): The index to delete to #: array_del() { - local _name _index + local __farr_name __farr_index - local _gvrname _l _new_l _idx _idx1 _value + local __farr_gvrname __farr_l __farr_new_l + local __farr_idx __farr_idx_1 __farr_value [ $# -lt 1 ] && _farr_fatal "missing array name" - _name=$1 - _gvrname=${_farr_global_prefix}$1 + __farr_name=$1 + __farr_gvrname=${_farr_global_prefix}$1 [ $# -lt 2 ] && _farr_fatal "missing array index" - _index=$2 + __farr_index=$2 # Check whether the variable already exists - eval _l=\${${_gvrname}__:-${_farr_unset}} - if [ "${_l}" = ${_farr_unset} ]; then - _farr_fatal "array \`${_name}' does not exist" + eval __farr_l=\${${__farr_gvrname}__:-${_farr_unset}} + if [ "${__farr_l}" = ${_farr_unset} ]; then + _farr_fatal "array \`${__farr_name}' does not exist" fi # check index range - if [ \( "${_index}" -lt 1 \) -o \( "${_index}" -gt ${_l} \) ]; then + if [ \( "${__farr_index}" -lt 1 \) -o \( "${__farr_index}" -gt ${__farr_l} \) ]; then _farr_fatal "array index out of bounds" fi - _new_l=$((${_l} - 1)) - _idx=${_index} - _idx1=$((${_idx} + 1)) - while [ ${_idx} -lt ${_l} ]; do + __farr_new_l=$((${__farr_l} - 1)) + __farr_idx=${__farr_index} + __farr_idx_1=$((${__farr_idx} + 1)) + while [ ${__farr_idx} -lt ${__farr_l} ]; do # copy the following value to the current index - eval _value=\"\${${_gvrname}_${_idx1}}\" - eval ${_gvrname}_${_idx}=\$\'"$(_farr_quote_for_eval_dsq "${_value}")"\' - _idx=$((${_idx} + 1)) - _idx1=$((${_idx} + 1)) + eval __farr_value=\"\${${__farr_gvrname}_${__farr_idx_1}}\" + eval ${__farr_gvrname}_${__farr_idx}=\$\'"$(_farr_quote_for_eval_dsq "${__farr_value}")"\' + __farr_idx=$((${__farr_idx} + 1)) + __farr_idx_1=$((${__farr_idx} + 1)) done # Drop the last item - eval unset unset ${_gvrname}_${_idx} + eval unset unset ${__farr_gvrname}_${__farr_idx} # Set the new length - eval ${_gvrname}__=${_new_l} + eval ${__farr_gvrname}__=${__farr_new_l} } @@ -420,28 +420,28 @@ #: $1 (str): The name of the existing array #: array_clear() { - local _name + local __farr_name - local _gvrname _l _idx + local __farr_gvrname __farr_l __farr_idx [ $# -lt 1 ] && _farr_fatal "missing array name" - _name=$1 - _gvrname=${_farr_global_prefix}$1 + __farr_name=$1 + __farr_gvrname=${_farr_global_prefix}$1 # Check whether the variable already exists - eval _l=\${${_gvrname}__:-${_farr_unset}} - if [ "${_l}" = ${_farr_unset} ]; then - _farr_fatal "array \`${_name}' does not exist" + eval __farr_l=\${${__farr_gvrname}__:-${_farr_unset}} + if [ "${__farr_l}" = ${_farr_unset} ]; then + _farr_fatal "array \`${__farr_name}' does not exist" fi - _idx=1 - while [ ${_idx} -le ${_l} ]; do - eval unset ${_gvrname}_${_idx} - _idx=$((${_idx} + 1)) + __farr_idx=1 + while [ ${__farr_idx} -le ${__farr_l} ]; do + eval unset ${__farr_gvrname}_${__farr_idx} + __farr_idx=$((${__farr_idx} + 1)) done # Length is now zero - eval ${_gvrname}__=0 + eval ${__farr_gvrname}__=0 } @@ -456,27 +456,27 @@ #: - A falsy value if the array does not exist #: array_destroy() { - local _name + local __farr_name - local _gvrname _l _idx + local __farr_gvrname __farr_l __farr_idx [ $# -lt 1 ] && _farr_fatal "missing array name" - _name=$1 - _gvrname=${_farr_global_prefix}$1 + __farr_name=$1 + __farr_gvrname=${_farr_global_prefix}$1 # Handle non-existing array names - eval _l=\${${_gvrname}__:-${_farr_unset}} - if [ "${_l}" = ${_farr_unset} ]; then + eval __farr_l=\${${__farr_gvrname}__:-${_farr_unset}} + if [ "${__farr_l}" = ${_farr_unset} ]; then return 1 fi - _idx=1 - while [ ${_idx} -le ${_l} ]; do - eval unset ${_gvrname}_${_idx} - _idx=$((${_idx} + 1)) + __farr_idx=1 + while [ ${__farr_idx} -le ${__farr_l} ]; do + eval unset ${__farr_gvrname}_${__farr_idx} + __farr_idx=$((${__farr_idx} + 1)) done # Remove - eval unset ${_gvrname}__ + eval unset ${__farr_gvrname}__ } @@ -492,27 +492,27 @@ #: 1 (falsy) otherwise #: array_contains() { - local _name _searched_value + local __farr_name __farr_searched_value - local _gvrname _l _idx _existing_value + local __farr_gvrname __farr_l __farr_idx __farr_existing_value [ $# -lt 1 ] && _farr_fatal "missing array name" - _name=$1 - _gvrname=${_farr_global_prefix}$1 + __farr_name=$1 + __farr_gvrname=${_farr_global_prefix}$1 [ $# -ne 2 ] && _farr_fatal "missing value to search for" - _searched_value="$2" + __farr_searched_value="$2" # Check whether the variable already exists - eval _l=\${${_gvrname}__:-${_farr_unset}} - if [ "${_l}" = ${_farr_unset} ]; then - _farr_fatal "array \`${_name}' does not exist" + eval __farr_l=\${${__farr_gvrname}__:-${_farr_unset}} + if [ "${__farr_l}" = ${_farr_unset} ]; then + _farr_fatal "array \`${__farr_name}' does not exist" fi - _idx=1 - while [ ${_idx} -le ${_l} ]; do - eval _existing_value=\"\${${_gvrname}_${_idx}}\" - [ "${_existing_value}" = "${_searched_value}" ] && return 0 - _idx=$((${_idx} + 1)) + __farr_idx=1 + while [ ${__farr_idx} -le ${__farr_l} ]; do + eval __farr_existing_value=\"\${${__farr_gvrname}_${__farr_idx}}\" + [ "${__farr_existing_value}" = "${__farr_searched_value}" ] && return 0 + __farr_idx=$((${__farr_idx} + 1)) done return 1 } @@ -537,36 +537,36 @@ #: - 1 (falsy) otherwise #: array_find() { - local _varname _name _searched_value _start _end + local __farr_varname __farr_name __farr_searched_value __farr_start __farr_end - local _gvrname _l _sidx _existing_value + local __farr_gvrname __farr_l __farr_cur_idx __farr_existing_value [ $# -lt 1 ] && _farr_fatal "missing variable name" - _varname=$1 + __farr_varname=$1 [ $# -lt 2 ] && _farr_fatal "missing array name" - _name=$2 - _gvrname=${_farr_global_prefix}$2 + __farr_name=$2 + __farr_gvrname=${_farr_global_prefix}$2 [ $# -lt 3 ] && _farr_fatal "missing value to search for" - _searched_value="$3" + __farr_searched_value="$3" # Check whether the variable already exists - eval _l=\${${_gvrname}__:-${_farr_unset}} - if [ "${_l}" = ${_farr_unset} ]; then - _farr_fatal "array \`${_name}' does not exist" + eval __farr_l=\${${__farr_gvrname}__:-${_farr_unset}} + if [ "${__farr_l}" = ${_farr_unset} ]; then + _farr_fatal "array \`${__farr_name}' does not exist" fi - _start=${4-1} - _end=${5-${_l}} + __farr_start=${4-1} + __farr_end=${5-${__farr_l}} - _sidx=${_start} - while [ ${_sidx} -le ${_end} ]; do - eval _existing_value=\"\${${_gvrname}_${_sidx}}\" - if [ "${_existing_value}" = "${_searched_value}" ]; then - #printf "%d" ${_isdx} - eval ${_varname}=${_sidx} + __farr_cur_idx=${__farr_start} + while [ ${__farr_cur_idx} -le ${__farr_end} ]; do + eval __farr_existing_value=\"\${${__farr_gvrname}_${__farr_cur_idx}}\" + if [ "${__farr_existing_value}" = "${__farr_searched_value}" ]; then + #printf "%d" ${__farr_cur_idx} + eval ${__farr_varname}=${__farr_cur_idx} return 0 fi - _sidx=$((${_sidx} + 1)) + __farr_cur_idx=$((${__farr_cur_idx} + 1)) done return 1 } @@ -593,28 +593,28 @@ #: at the start of execution. #: array_for_each() { - local _name _cb + local __farr_name __farr_callback - local _gvrname _l _idx _value _rv + local __farr_gvrname __farr_l __farr_idx __farr_rv [ $# -lt 1 ] && _farr_fatal "missing array name" - _name=$1 - _gvrname=${_farr_global_prefix}$1 + __farr_name=$1 + __farr_gvrname=${_farr_global_prefix}$1 [ $# -lt 2 ] && _farr_fatal "missing callback function name" - _cb="$2" + __farr_callback="$2" # Check whether the variable already exists - eval _l=\${${_gvrname}__:-${_farr_unset}} - if [ "${_l}" = ${_farr_unset} ]; then - _farr_fatal "array \`${_name}' does not exist" + eval __farr_l=\${${__farr_gvrname}__:-${_farr_unset}} + if [ "${__farr_l}" = ${_farr_unset} ]; then + _farr_fatal "array \`${__farr_name}' does not exist" fi - _idx=1 - while [ ${_idx} -le ${_l} ]; do - eval "${_cb} ${_name} ${_idx} \"\${${_gvrname}_${_idx}}\"" - _rv=$? - [ ${_rv} -ne 0 ] && return ${_rv} - _idx=$((${_idx} + 1)) + __farr_idx=1 + while [ ${__farr_idx} -le ${__farr_l} ]; do + 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)) done return 0 } @@ -625,28 +625,28 @@ #: beginning with the last index. #: array_reversed_for_each() { - local _name _cb + local __farr_name __farr_callback - local _gvrname _l _idx _value _rv + local __farr_gvrname __farr_l __farr_idx __farr_rv [ $# -lt 1 ] && _farr_fatal "missing array name" - _name=$1 - _gvrname=${_farr_global_prefix}$1 + __farr_name=$1 + __farr_gvrname=${_farr_global_prefix}$1 [ $# -lt 2 ] && _farr_fatal "missing callback function name" - _cb="$2" + __farr_callback="$2" # Check whether the variable already exists - eval _l=\${${_gvrname}__:-${_farr_unset}} - if [ "${_l}" = ${_farr_unset} ]; then - _farr_fatal "array \`${_name}' does not exist" + eval __farr_l=\${${__farr_gvrname}__:-${_farr_unset}} + if [ "${__farr_l}" = ${_farr_unset} ]; then + _farr_fatal "array \`${__farr_name}' does not exist" fi - _idx=${_l} - while [ ${_idx} -gt 0 ]; do - eval "${_cb} ${_name} ${_idx} \"\${${_gvrname}_${_idx}}\"" - _rv=$? - [ ${_rv} -ne 0 ] && return ${_rv} - _idx=$((${_idx} - 1)) + __farr_idx=${__farr_l} + while [ ${__farr_idx} -gt 0 ]; do + 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)) done return 0 } @@ -662,24 +662,24 @@ #: 0 #: array_debug() { - local _name + local __farr_name - local _gvrname _l + local __farr_gvrname __farr_l [ $# -lt 1 ] && _farr_fatal "missing array name" - _name=$1 - _gvrname=${_farr_global_prefix}$1 + __farr_name=$1 + __farr_gvrname=${_farr_global_prefix}$1 # Check whether the variable already exists - eval _l=\${${_gvrname}__:-${_farr_unset}} - if [ "${_l}" = ${_farr_unset} ]; then - echo "DEBUG: array \`${_name}' does not exist" 1>&2 + eval __farr_l=\${${__farr_gvrname}__:-${_farr_unset}} + if [ "${__farr_l}" = ${_farr_unset} ]; then + echo "DEBUG: array \`${__farr_name}' does not exist" 1>&2 return 0 fi - echo "DEBUG: array \`${_name}' has length ${_l}" 1>&2 - if [ ${_l} -gt 0 ]; then + echo "DEBUG: array \`${__farr_name}' has length ${__farr_l}" 1>&2 + if [ ${__farr_l} -gt 0 ]; then echo "DEBUG: its contents:" 1>&2 - array_for_each ${_name} _array_debug_print_value + array_for_each ${__farr_name} _array_debug_print_value fi return 0 }
