From ad1acb808e5c7695cb54af7b449db11afd710f21 Mon Sep 17 00:00:00 2001 From: Thorsten Behrens Date: Sun, 22 Jun 2014 03:19:51 +0200 Subject: Align dev_unit_name() with systemd's function. Add more corner cases from systemd's unit_name_from_path_instance() C function. Signed-off-by: Thorsten Behrens --- modules.d/99base/dracut-lib.sh | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh index 5a867b8..e201af8 100755 --- a/modules.d/99base/dracut-lib.sh +++ b/modules.d/99base/dracut-lib.sh @@ -857,13 +857,25 @@ wait_for_mount() } >> "$hookdir/emergency/90-${_name}.sh" } +# get a systemd-compatible unit name from a path +# (mimicks unit_name_from_path_instance()) dev_unit_name() { - _name="${1%%/}" - _name="${_name##/}" - _name="$(str_replace "$_name" '-' '\x2d')" - _name="$(str_replace "$_name" '/' '-')" - echo "$_name" + local dev="$1" + + if [ "$dev" = "/" -o -z "$dev" ]; then + printf -- "-" + exit 0 + fi + + dev="${1%%/}" + dev="${dev##/}" + dev="$(str_replace "$dev" '\' '\x5c')" + dev="$(str_replace "$dev" '-' '\x2d')" + dev=${dev/#\./\\x2e} + dev="$(str_replace "$dev" '/' '-')" + + printf -- "%s" "$dev" } # wait_for_dev -- 1.8.4.5