summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordteske <dteske@FreeBSD.org>2014-03-14 02:50:32 +0000
committerdteske <dteske@FreeBSD.org>2014-03-14 02:50:32 +0000
commitea3e323b42476c1e55c5031a1d4b9d9da5413224 (patch)
treea7f24f9061c41212a315bd5c3b8f039678557d2a
parent0e1eb3b2f374dce39c7400e535794d395ed04a9b (diff)
downloadFreeBSD-src-ea3e323b42476c1e55c5031a1d4b9d9da5413224.zip
FreeBSD-src-ea3e323b42476c1e55c5031a1d4b9d9da5413224.tar.gz
Fix future namespace issues for functions taking $var_to_set -- functions
taking a variable to set need to make sure they protect their locals; if $var_to_set positional argument coincides with a local the expected call to `setvar' will fail to reach outside of the function's namespace. When such collisions are experienced (as I did in the rewrite of usermgmt) the solution is to append a full or abbreviated version of the function name to the local (ultimately eliminating collisions). This is rarely needed and only occurs when you have a lot of like-named functions that pass very similar $var_to_set positional arguments to each other (such as-is the case with an expansive library such as `dialog.subr').
-rw-r--r--usr.sbin/bsdconfig/share/dialog.subr74
1 files changed, 48 insertions, 26 deletions
diff --git a/usr.sbin/bsdconfig/share/dialog.subr b/usr.sbin/bsdconfig/share/dialog.subr
index d05d4fb..e0dfe80 100644
--- a/usr.sbin/bsdconfig/share/dialog.subr
+++ b/usr.sbin/bsdconfig/share/dialog.subr
@@ -1,6 +1,6 @@
if [ ! "$_DIALOG_SUBR" ]; then _DIALOG_SUBR=1
#
-# Copyright (c) 2006-2013 Devin Teske
+# Copyright (c) 2006-2014 Devin Teske
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -469,16 +469,17 @@ f_dialog_menu_constrain()
# Print debug warnings if any given (non-NULL) argument are invalid
# NOTE: Don't change the name of $__{var,min,}{height,width,rows}
#
- local __height __width __rows
+ local __height_menu_constrain __width_menu_constrain
+ local __rows_menu_constrain
local __arg __cp __fname=f_dialog_menu_constrain
for __arg in height width rows; do
debug= f_getvar __var_$__arg __cp
[ "$__cp" ] || continue
- if ! debug= f_getvar "$__cp" __$__arg; then
+ if ! debug= f_getvar "$__cp" __${__arg}_menu_constrain; then
f_dprintf "%s: var_%s variable \`%s' not set" \
$__fname $__arg "$__cp"
__retval=$FAILURE
- elif ! eval f_isinteger \$__$__arg; then
+ elif ! eval f_isinteger \$__${__arg}_menu_constrain; then
f_dprintf "%s: var_%s variable value not a number" \
$__fname $__arg
__retval=$FAILURE
@@ -502,9 +503,11 @@ f_dialog_menu_constrain()
# Adjust height if desired
if [ "$__var_height" ]; then
- if [ $__height -lt ${__min_height:-0} ]; then
+ if [ $__height_menu_constrain -lt ${__min_height:-0} ]; then
setvar "$__var_height" $__min_height
- elif [ $__height -gt $__max_height_menu_constrain ]; then
+ elif [ $__height_menu_constrain -gt \
+ $__max_height_menu_constrain ]
+ then
setvar "$__var_height" $__max_height_menu_constrain
fi
fi
@@ -516,9 +519,11 @@ f_dialog_menu_constrain()
else
: ${__min_width:=${DIALOG_MIN_WIDTH:-24}}
fi
- if [ $__width -lt $__min_width ]; then
+ if [ $__width_menu_constrain -lt $__min_width ]; then
setvar "$__var_width" $__min_width
- elif [ $__width -gt $__max_width_menu_constrain ]; then
+ elif [ $__width_menu_constrain -gt \
+ $__max_width_menu_constrain ]
+ then
setvar "$__var_width" $__max_width_menu_constrain
fi
fi
@@ -531,16 +536,20 @@ f_dialog_menu_constrain()
: ${__min_rows:=0}
fi
- local __max_rows=$(( $__max_height_menu_constrain - 7 ))
+ local __max_rows_menu_constrain=$((
+ $__max_height_menu_constrain - 7
+ ))
# If prompt_len is zero (no prompt), bump the max-rows by 1
# Default assumption is (if no argument) that there's no prompt
- [ ${__prompt_len:-0} -gt 0 ] ||
- __max_rows=$(( $__max_rows + 1 ))
+ [ ${__prompt_len:-0} -gt 0 ] || __max_rows_menu_constrain=$((
+ $__max_rows_menu_constrain + 1
+ ))
- if [ $__rows -lt $__min_rows ]; then
+ if [ $__rows_menu_constrain -lt $__min_rows ]; then
setvar "$__var_rows" $__min_rows
- elif [ $__rows -gt $__max_rows ]; then
- setvar "$__var_rows" $__max_rows
+ elif [ $__rows_menu_constrain -gt $__max_rows_menu_constrain ]
+ then
+ setvar "$__var_rows" $__max_rows_menu_constrain
fi
fi
@@ -1100,19 +1109,20 @@ f_dialog_radiolist_size()
# longest item-length (both used to bump the width), and the number of
# rows (used to bump the height).
#
- local __longest_tag=0 __longest_item=0 __rows=0
+ local __longest_tag=0 __longest_item=0 __rows_rlist_size=0
while [ $# -ge 3 ]; do
local __tag="$1" __item="$2"
shift 3 # tag/item/status
[ ${#__tag} -gt $__longest_tag ] && __longest_tag=${#__tag}
[ ${#__item} -gt $__longest_item ] && __longest_item=${#__item}
- __rows=$(( $__rows + 1 ))
+ __rows_rlist_size=$(( $__rows_rlist_size + 1 ))
done
# Adjust rows early (for up-coming height calculation)
if [ "$__var_height" -o "$__var_rows" ]; then
# Add a row for visual aid if using Xdialog(1)
- [ "$USE_XDIALOG" ] && __rows=$(( $__rows + 1 ))
+ [ "$USE_XDIALOG" ] &&
+ __rows_rlist_size=$(( $__rows_rlist_size + 1 ))
fi
# Adjust height if desired
@@ -1120,10 +1130,12 @@ f_dialog_radiolist_size()
# Add rows to height
if [ "$USE_XDIALOG" ]; then
__height_rlist_size=$((
- $__height_rlist_size + $__rows + 7 ))
+ $__height_rlist_size + $__rows_rlist_size + 7
+ ))
else
__height_rlist_size=$((
- $__height_rlist_size + $__rows + 4 ))
+ $__height_rlist_size + $__rows_rlist_size + 4
+ ))
fi
setvar "$__var_height" $__height_rlist_size
fi
@@ -1140,7 +1152,7 @@ f_dialog_radiolist_size()
fi
# Store adjusted rows if desired
- [ "$__var_rows" ] && setvar "$__var_rows" $__rows
+ [ "$__var_rows" ] && setvar "$__var_rows" $__rows_rlist_size
# Constrain height, width, and rows to sensible minimum/maximum values
# Return success if no-constrain, else return status from constrain
@@ -1220,20 +1232,26 @@ f_dialog_radiolist_with_help_size()
# all used to bump the width -- and the number of rows (used to bump
# the height).
#
- local __longest_tag=0 __longest_item=0 __longest_help=0 __rows=0
+ local __longest_tag=0 __longest_item=0 __longest_help=0
+ local __rows_rlist_with_help_size=0
while [ $# -ge 4 ]; do
local __tag="$1" __item="$2" __status="$3" __help="$4"
shift 4 # tag/item/status/help
[ ${#__tag} -gt $__longest_tag ] && __longest_tag=${#__tag}
[ ${#__item} -gt $__longest_item ] && __longest_item=${#__item}
[ ${#__help} -gt $__longest_help ] && __longest_help=${#__help}
- __rows=$(( $__rows + 1 ))
+ __rows_rlist_with_help_size=$((
+ $__rows_rlist_with_help_size + 1
+ ))
done
# Adjust rows early (for up-coming height calculation)
if [ "$__var_height" -o "$__var_rows" ]; then
# Add a row for visual aid if using Xdialog(1)
- [ "$USE_XDIALOG" ] && __rows=$(( $__rows + 1 ))
+ [ "$USE_XDIALOG" ] &&
+ __rows_rlist_with_help_size=$((
+ $__rows_rlist_with_help_size + 1
+ ))
fi
# Adjust height if desired
@@ -1241,10 +1259,14 @@ f_dialog_radiolist_with_help_size()
# Add rows to height
if [ "$USE_XDIALOG" ]; then
__height_rlist_with_help_size=$((
- $__height_rlist_with_help_size + $__rows + 7 ))
+ $__height_rlist_with_help_size +
+ $__rows_rlist_with_help_size + 7
+ ))
else
__height_rlist_with_help_size=$((
- $__height_rlist_with_help_size + $__rows + 4 ))
+ $__height_rlist_with_help_size +
+ $__rows_rlist_with_help_size + 4
+ ))
fi
setvar "$__var_height" $__height
fi
@@ -1270,7 +1292,7 @@ f_dialog_radiolist_with_help_size()
fi
# Store adjusted rows if desired
- [ "$__var_rows" ] && setvar "$__var_rows" $__rows
+ [ "$__var_rows" ] && setvar "$__var_rows" $__rows_rlist_with_help_size
# Constrain height, width, and rows to sensible minimum/maximum values
# Return success if no-constrain, else return status from constrain
OpenPOWER on IntegriCloud