From 49cfeccb335583ca1dd9e519b9504ca52b9a74ca Mon Sep 17 00:00:00 2001 From: Dave Reisner Date: Tue, 4 Sep 2012 10:07:40 -0400 Subject: functions: allow add_symlink to only take a single arg In the case of a single arg, use readlink(1) to resolve the target of the symlink. Document this, and additionally note the lack of guarantee about the target of the symlink. Signed-off-by: Dave Reisner --- functions | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'functions') diff --git a/functions b/functions index 4f25a86..8a270fd 100644 --- a/functions +++ b/functions @@ -402,22 +402,33 @@ add_dir() { } add_symlink() { - # Add a symlink to the initcpio image. + # Add a symlink to the initcpio image. There is no checking done + # to ensure that the target of the symlink exists. # $1: pathname of symlink on image - # $2: absolute path to target of symlink + # $2: absolute path to target of symlink (optional, can be read from $1) - (( $# == 2 )) || return 1 + local name_=$1 target_=$2 - add_dir "${1%/*}" + (( $# == 1 || $# == 2 )) || return 1 + + if [[ -z $target_ ]]; then + target_=$(readlink -f "$name_") + if [[ -z $target_ ]]; then + error 'invalid symlink: %s' "$name_" + return 1 + fi + fi + + add_dir "${name_%/*}" if (( ! QUIET )); then if [[ -L $BUILDROOT$1 ]]; then - plain "overwriting symlink %s -> %s" "$1" "$2" + plain "overwriting symlink %s -> %s" "$name_" "$target_" else - plain "adding symlink: %s -> %s" "$1" "$2" + plain "adding symlink: %s -> %s" "$name_" "$target_" fi fi - ln -sfn "$2" "$BUILDROOT$1" + ln -sfn "$target_" "$BUILDROOT$name_" } add_file() { -- cgit v1.2.3-24-g4f1b