libmakepkg: increase robustness of the detection of array variables

Extract array detection into its own utility function that ensures
extglob is enabled.

Suggested-by: Dave Reisner <dreisner@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
Allan McRae 2016-02-07 21:27:31 +10:00
parent 0fa695d0e3
commit 3cb1669e07
2 changed files with 20 additions and 3 deletions

View File

@ -43,7 +43,7 @@ lint_variable() {
for i in ${array[@]} ${arch_array[@]}; do
eval "keys=(\"\${!$i[@]}\")"
if (( ${#keys[*]} > 0 )); then
if [[ "$(declare -p $i)" != "declare -a "* ]]; then
if ! is_array $i; then
error "$(gettext "%s should be an array")" "$i"
ret=1
fi
@ -57,7 +57,7 @@ lint_variable() {
v="${i}_${a}"
eval "keys=(\"\${!${v}[@]}\")"
if (( ${#keys[*]} > 0 )); then
if [[ "$(declare -p $v)" != "declare -a "* ]]; then
if ! is_array $v; then
error "$(gettext "%s_%s should be an array")" "$i" "$a"
ret=1
fi
@ -68,7 +68,7 @@ lint_variable() {
for i in ${string[@]}; do
eval "keys=(\"\${!$i[@]}\")"
if (( ${#keys[*]} > 0 )); then
if [[ "$(declare -p $i)" == "declare -a "* ]]; then
if is_array $i; then
error "$(gettext "%s should not be an array")" "$i"
ret=1
fi

View File

@ -37,6 +37,23 @@ in_array() {
return 1 # Not Found
}
# tests if a variable is an array
is_array() {
local v=$1
local ret=1
# this function requires extglob - save current options to restore later
local shellopts=$(shopt -p)
shopt -s extglob
if [[ $(declare -p "$i") == declare\ -*([[:alnum:]])a*([[:alnum:]])\ * ]]; then
ret=0
fi
eval "$shellopts"
return $ret
}
# Canonicalize a directory path if it exists
canonicalize_path() {
local path="$1";