summaryrefslogtreecommitdiffstats
path: root/usr.sbin/bsdconfig
diff options
context:
space:
mode:
authordteske <dteske@FreeBSD.org>2014-07-31 22:00:36 +0000
committerdteske <dteske@FreeBSD.org>2014-07-31 22:00:36 +0000
commit5b30ac864c3160ef60e71ce9d69e8ce8ebe5c2a1 (patch)
tree8e8ea70ac0e4c0cc134a4963b0a86ddceaa998e3 /usr.sbin/bsdconfig
parentb8112840fb7f996ebf4cb69002bbd4bc5d4d901b (diff)
downloadFreeBSD-src-5b30ac864c3160ef60e71ce9d69e8ce8ebe5c2a1.zip
FreeBSD-src-5b30ac864c3160ef60e71ce9d69e8ce8ebe5c2a1.tar.gz
Define a setvar() function for platforms using a shell unlike FreeBSD's
sh(1) for `/bin/sh' (e.g., bash(1) which lacks a setvar definition). This is to improve portability to other Operating Systems (e.g., Linux).
Diffstat (limited to 'usr.sbin/bsdconfig')
-rw-r--r--usr.sbin/bsdconfig/share/common.subr26
1 files changed, 26 insertions, 0 deletions
diff --git a/usr.sbin/bsdconfig/share/common.subr b/usr.sbin/bsdconfig/share/common.subr
index 8fb9adaa..6ce1956 100644
--- a/usr.sbin/bsdconfig/share/common.subr
+++ b/usr.sbin/bsdconfig/share/common.subr
@@ -220,6 +220,32 @@ f_have()
f_quietly type "$@"
}
+# setvar $var_to_set [$value]
+#
+# Implement setvar for shells such as unlike FreeBSD sh(1).
+#
+if ! f_have setvar; then
+setvar()
+{
+ [ $# -gt 0 ] || return $SUCCESS
+ local __setvar_var_to_set="$1" __setvar_right="$2" __setvar_left=
+ case $# in
+ 1) unset "$__setvar_var_to_set"
+ return $? ;;
+ 2) : fall through ;;
+ *) f_err "setvar: too many arguments\n"
+ return $FAILURE
+ esac
+ while case "$__setvar_r" in *\'*) : ;; *) false ; esac
+ do
+ __setvar_left="$__setvar_left${__setvar_right%%\'*}'\\''"
+ __setvar_right="${__setvar_right#*\'}"
+ done
+ __setvar_left="$__setvar_left${__setvar_right#*\'}"
+ eval "$__setvar_var_to_set='$__setvar_left'"
+}
+fi
+
# f_which $anything [$var_to_set]
#
# A fast built-in replacement for syntaxes such as foo=$( which bar ). In a
OpenPOWER on IntegriCloud