64 lines
1.7 KiB
Diff
64 lines
1.7 KiB
Diff
From c44e3cb4e5ace39247c0a6619668add2d1dc92e8 Mon Sep 17 00:00:00 2001
|
|
From: Michal Soltys <soltys@ziu.info>
|
|
Date: Sat, 8 Oct 2011 00:20:50 +0200
|
|
Subject: [PATCH] dracut-functions: conv/normalize minor corrections
|
|
|
|
mostly with reference to earlier commit:
|
|
|
|
- bash doesn't need unsetting locals
|
|
- make normalize_path() a bit faster, also make sure we remove all
|
|
trailing slashes
|
|
- normalize paths before tests
|
|
|
|
Signed-off-by: Michal Soltys <soltys@ziu.info>
|
|
---
|
|
dracut-functions | 22 ++++++++++------------
|
|
1 files changed, 10 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/dracut-functions b/dracut-functions
|
|
index 12dfa70..ce593c9 100755
|
|
--- a/dracut-functions
|
|
+++ b/dracut-functions
|
|
@@ -83,31 +83,29 @@ print_vars() {
|
|
}
|
|
|
|
normalize_path() {
|
|
- p=$1
|
|
- while [[ ${p#*//*} != $p ]]; do
|
|
- p=${p/\/\///}
|
|
- done
|
|
- echo $p
|
|
+ shopt -q -s extglob
|
|
+ set -- "${1//+(\/)//}"
|
|
+ shopt -q -u extglob
|
|
+ echo "${1%/}"
|
|
}
|
|
|
|
convert_abs_rel() {
|
|
- local __current __absolute __abssize __cursize __newpath="" __oldifs
|
|
- local -i __i __level=0
|
|
+ local __current __absolute __abssize __cursize __newpath __oldifs
|
|
+ local -i __i __level
|
|
# PS4='${BASH_SOURCE}@${LINENO}(${FUNCNAME[0]}): ';
|
|
|
|
+ set -- "$(normalize_path "$1")" "$(normalize_path "$2")"
|
|
+
|
|
# corner case #1 - self looping link
|
|
[[ "$1" == "$2" ]] && { echo "${1##*/}"; return; }
|
|
|
|
# corner case #2 - own dir link
|
|
[[ "${1%/*}" == "$2" ]] && { echo "."; return; }
|
|
|
|
- __current=$(normalize_path "$1")
|
|
- __absolute=$(normalize_path "$2")
|
|
-
|
|
__oldifs="$IFS"
|
|
IFS="/"
|
|
- __current=($__current)
|
|
- __absolute=($__absolute)
|
|
+ __current=($1)
|
|
+ __absolute=($2)
|
|
IFS="$__oldifs"
|
|
|
|
__abssize=${#__absolute[@]}
|