From e3eec4b8a21a640b7557678b92716a32f8d3dadf Mon Sep 17 00:00:00 2001 From: Thorsten Behrens Date: Thu, 11 Dec 2014 15:46:08 +0100 Subject: [PATCH] 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 Signed-off-by: Thomas Renninger --- modules.d/99base/dracut-lib.sh | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh index f7cffc4..5c1504f 100755 --- a/modules.d/99base/dracut-lib.sh +++ b/modules.d/99base/dracut-lib.sh @@ -866,18 +866,30 @@ 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() { + local dev="$1" + if command -v systemd-escape >/dev/null; then - systemd-escape -p "$1" + systemd-escape -p "$dev" return fi - _name="${1%%/}" - _name="${_name##/}" - _name="$(str_replace "$_name" '-' '\x2d')" - _name="$(str_replace "$_name" '/' '-')" - echo "$_name" + 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