diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh index f7cffc4f..5c1504f4 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