Use local variables in getconf & printconf.
[matthijs/upstream/backupninja.git] / lib / tools.in
index 0d368b8938b0ca1399840fc153c163237cc8f51b..9879e741039a5994bd544fd8e60896c9612d6cd5 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,23 +27,32 @@ 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() {
-   CURRENT_PARAM=$1
-   ret=`@AWK@ -f $libdirectory/parseini S=$CURRENT_SECTION P=$CURRENT_PARAM $CURRENT_CONF_FILE`
+# 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() {
+   local CURRENT_PARAM=$1
+   local ret=`@AWK@ -f $libdirectory/parseini S=$CURRENT_SECTION P=$CURRENT_PARAM $CURRENT_CONF_FILE`
    # if nothing is returned, set the default
    if [ "$ret" == "" -a "$2" != "" ]; then
       ret="$2"
    fi
 
-   # replace * with %, so that it is not globbed.
-   ret="${ret//\\*/__star__}"
+   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() {
+   local ret=`printconf "$1" "$2"`
 
-   # 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
 }