- # set default values
- while read name default_val required ty comment; do
- if test -z "$name"; then
- continue
- fi
- eval ${gsu_self}_$name="$default_val"
- done << EOF
- $gsu_config_vars
-EOF
- result="$HOME/.${gsu_self}rc"
- # overwrite by custom configuration
- if [ -r "$result" ]; then
- ret=-$E_GSU_SOURCE
- if ! . "$result"; then
- gsu_err_msg
- exit 1
+ for ((i=0; i < ${#gsu_options[@]}; i++)); do
+ eval "${gsu_options[$i]}"
+ eval val='"'\$$name'"'
+ eval orig_${gsu_config_var_prefix}_$name='"'${val}'"'
+ done
+
+ [[ -r "$conf" ]] && source "$conf"
+
+ for ((i=0; i < ${#gsu_options[@]}; i++)); do
+ local name= option_type= default_value= required=
+ local description= help_text=
+ local val orig_val
+
+ eval "${gsu_options[$i]}"
+
+
+ # Check name. It must be non-empty and consist of [a-zA-Z_0-9]
+ # only. Moreover it must not start with [a-zA-Z].
+
+ ret=-$E_GSU_BAD_CONFIG_VAR
+ result="$name"
+ # bash's =~ works only for 3.2 and newer, so use grep
+ echo "$name" | grep '^[a-zA-Z][a-zA-Z_0123456789]*$' &> /dev/null;
+ [[ $? -ne 0 ]] && return
+
+ eval orig_val='"'\$orig_${gsu_config_var_prefix}_$name'"'
+ if [[ -z "$orig_val" ]]; then
+ eval val='"'\$$name'"'
+ else
+ val="$orig_val"