summaryrefslogtreecommitdiff
path: root/scripts/local-premount/resume
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/local-premount/resume')
-rwxr-xr-xscripts/local-premount/resume29
1 files changed, 26 insertions, 3 deletions
diff --git a/scripts/local-premount/resume b/scripts/local-premount/resume
index 6bf95e5..11acfc7 100755
--- a/scripts/local-premount/resume
+++ b/scripts/local-premount/resume
@@ -20,10 +20,33 @@ if [ -z "${resume}" ]; then
fi
case $resume in
- LABEL=*)
- resume="/dev/disk/by-label/${resume#LABEL=}"
+LABEL=*)
+ resume="${resume#LABEL=}"
+
+ # support any / in LABEL= path (escape to \x2f)
+ case "${resume}" in
+ */*)
+ if command -v sed >/dev/null 2>&1; then
+ resume="$(echo ${resume} | sed 's,/,\\x2f,g')"
+ else
+ if [ "${resume}" != "${resume#/}" ]; then
+ resume="\x2f${resume#/}"
+ fi
+ if [ "${resume}" != "${resume%/}" ]; then
+ resume="${resume%/}\x2f"
+ fi
+ IFS='/'
+ newresume=
+ for s in $resume; do
+ newresume="${newresume:+${newresume}\\x2f}${s}"
+ done
+ unset IFS
+ resume="${newresume}"
+ fi
+ esac
+ resume="/dev/disk/by-label/${resume}"
;;
- UUID=*)
+UUID=*)
resume="/dev/disk/by-uuid/${resume#UUID=}"
;;
esac