Clarify (and improve) the escaping used in getconf.
[matthijs/upstream/backupninja.git] / lib / tools.in
index 0d368b8938b0ca1399840fc153c163237cc8f51b..a6dcf269ef2dfb6592b7247a779f6176ccaf8463 100644 (file)
@@ -1,5 +1,6 @@
 #!@BASH@
 # -*- mode: sh; sh-basic-offset: 3; indent-tabs-mode: nil; -*-
+# vim: set filetype=sh sw=3 sts=3 expandtab autoindent:
 
 # This file contains functions shared between ninjahelper and backupninja.
 
@@ -26,11 +27,10 @@ function setsection() {
 }
 
 #
-# sets a global var with name equal to $1
-# to the value of the configuration parameter $1
-# $2 is the default.
-#
-function getconf() {
+# Retrieves the configuration variable named $1 from the current config
+# file and section and echoes its value. If it is empty or not found, $2
+# is used.
+function printconf() {
    CURRENT_PARAM=$1
    ret=`@AWK@ -f $libdirectory/parseini S=$CURRENT_SECTION P=$CURRENT_PARAM $CURRENT_CONF_FILE`
    # if nothing is returned, set the default
@@ -38,11 +38,24 @@ function getconf() {
       ret="$2"
    fi
 
+   echo "$ret"
+}
+
+
+#
+# Retrieves the configuration variable named $1 from the current config
+# file and section and assigns its value to the global variable with the
+# same name. If it is empty or not found, $2 is used.
+#
+function getconf() {
+   ret=`printconf "$1" "$2"`
+
    # replace * with %, so that it is not globbed.
    ret="${ret//\\*/__star__}"
 
-   # this is weird, but single quotes are needed to
-   # allow for returned values with spaces. $ret is still expanded
-   # because it is in an 'eval' statement.
-   eval $1='$ret'
+   # We use escape the $ in $ret to delay expansion of $ret, so when $1
+   # is foo, eval sees foo=$ret and properly does the assignment
+   # (without the backslash, the right part of the assignment would be
+   # whatever is in ret and be subject to all kinds of expansion.
+   eval $1=\$ret
 }