#!@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() { 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 }