Add strip_prefix function.
[matthijs/upstream/backupninja.git] / lib / tools.in
index 89f2ff733918e888fc79a2f927252ee63e8bd346..4ca438f05e8dc17fc7d44537e66145609a0d1dc4 100644 (file)
 #!@BASH@
+# -*- mode: sh; sh-basic-offset: 3; indent-tabs-mode: nil; -*-
 
+# 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
+       local tempfile=`mktemp /tmp/$1.XXXXXXXX`
        echo $tempfile
 }
 
+#####################################################
+## CONFIG-FILE RELATED FUNCTIONS
+
+function setfile() {
+       CURRENT_CONF_FILE=$1
+}
+
+function setsection() {
+       CURRENT_SECTION=$1
+}
+
+#
+# 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`
+       # 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__}"
+
+       # 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'
+}
 
+#
+# Replaces escape sequences in $1 with the proper values for the vserver $2.
+# The result is put on stdout.  If $2 is empty, values for the host are
+# replaced. The following values are replaced:
+#
+# %%  Literal %
+# %h  The short hostname (as returned by hostname -s)
+# %H  The full hostname (as returned by hostname --fqdn)
+# %n  The vserver name, or empty for the host
+# %N  The vserver name, or "host" for the host
+# %v  The vserver root directory, or empty for the host
+#
+# Note that the given vserver must be running!
+#
+function interpolate() {
+       path=$1
+       vsname=$2
+       vexec=${vsname:+$VSERVER $vsname exec }
+       # Find the values to replace
+       h=`$vexec hostname -s`
+       H=`$vexec hostname --fqdn`
+       n=$vsname
+       N=${vsname:-host}
+       v=${vsname:+$VROOTDIR/$vsname}
+
+       expr=''
+       for var in h H n N v; do
+               # Do indirect lookup of the value to replace
+               val=${!var}
+               # Escape slashes (twice, bash seems to eat one somewhere)
+               val=`echo "$val" | sed 's#/#\\\\/#g'`
+               # Add replacement pattern. The first part checks that there is
+               # an odd number of percent signs before the variable, so
+               # double % is properly left alone.
+               expr="${expr}s/\(\(^\|[^%]\)\(%%\)*\)%$var/\1$val/g;"
+       done
+       # Finally replace literal % signs
+       expr="${expr}s/%%/%/g"
+
+       # Do the actual interpolation
+       echo $path | sed "$expr"
+}
+
+# Does the $1 start with $2 ?
+function starts_with() {
+       # Get the head of $1 as long as $2
+       head=`echo $1 | head -c ${#2}`
+       # Is it equal to $2?
+       [ "$head" = "$2" ]
+}
+
+# Strip the prefix $2 from $1. Assumes that $1 actually starts with $1.
+# The result is put on stdout.
+function strip_prefix() {
+       # Strip the first ${#2} (the length of $2) characters from $1.
+       # tail -c +N means start at the Nth byte, 1-based, so we add 1.
+       echo $1 | tail -c +$((${#2}+1))
+}