#!@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.
+
+#####################################################
+## MISC FUNCTIONS
#
# create a temporary file in a secure way.
#
function maketemp() {
- if [ -x /bin/mktemp ]
- then
- local tempfile=`mktemp /tmp/$1.XXXXXXXX`
- else
- DATE=`date`
- sectmp=`echo $DATE | /usr/bin/md5sum | cut -d- -f1`
- local tempfile=/tmp/$1.$sectmp
- fi
- echo $tempfile
+ local tempfile=`mktemp /tmp/$1.XXXXXXXX`
+ echo $tempfile
+}
+
+#####################################################
+## CONFIG-FILE RELATED FUNCTIONS
+
+function setfile() {
+ CURRENT_CONF_FILE=$1
+}
+
+function setsection() {
+ CURRENT_SECTION=$1
+}
+
+#
+# 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() {
+ # Be careful! This function might be called with an empty IFS
+
+ 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 [ -z "$ret" -a -n "$2" ]; then
+ 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() {
+ # Be careful! This function might be called with an empty IFS
+
+ local ret=`printconf "$1" "$2"`
+
+ # 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
+}
+
+# Reads the variable denoted by $1 from the current configuration file
+# and section into the array variable pointed to by $1. Each line in the
+# configuration file is returned as a separate element in the resulting
+# array. For example, the following ini fragment results in an array
+# with three values: "one", "two" and "three"
+# [section]
+# variable=one\
+# two
+# variable=three
+# $2, $3, etc. are used as the default value (e.g., each of the
+# arguments are elements in the resulting array)
+function getconf_lines() {
+ # Run getconf_words with an empty IFS, so the read in there does not
+ # do any word splitting. This shouldn't affect any other splitting
+ # (since IFS is only used to split expanded parameters, not the
+ # spaces that are in this file directly).
+ IFS='' getconf_words "$@"
+}
+
+# Reads the variable denoted by $1 from the current configuration file
+# and section into the array variable pointed to by $1. Each word in
+# each line in the configuration file is returned as a separate element
+# in the resulting array. Whitespace can be escaped using backslashes. For
+# example, the following ini fragment results in an array with three
+# values: "one one", "two" and "three"
+# [section]
+# variable=one\ one two
+# variable=three
+# $2 is used as the default value (which should be just a string, which
+# will be split on newlines and whitespace)
+function getconf_words() {
+ # Be careful! This function might be called with an empty IFS
+
+ # Get the variable name, so $@ only contains the default elements
+ local varname="$1"
+ shift
+ # Get the value from the config
+ local value=`printconf $varname ""`
+ # Init the result variable to an empty array
+ eval "$varname=()"
+ if [ -z "$value" ]; then
+ # Use the default value, i.e., copy $@ into the result
+ append "$varname" "$@"
+ else
+ local tmp
+ # Read every line and append it to our result
+ while read -a tmp; do
+ append "$varname" "${tmp[@]}"
+ done <<< "$value"
+ fi
+}