summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scripts/functions36
1 files changed, 17 insertions, 19 deletions
diff --git a/scripts/functions b/scripts/functions
index aa53010..fa2de6e 100644
--- a/scripts/functions
+++ b/scripts/functions
@@ -103,32 +103,30 @@ load_modules()
# lilo compatibility
parse_numeric() {
case $1 in
- "")
- return
+ *:*)
+ # Does it match /[0-9]*:[0-9]*/?
+ minor=${1#*:}
+ major=${1%:*}
+ case $major$minor in
+ *[!0-9]*)
+ # No.
+ return
+ ;;
+ esac
;;
- /*)
+ "" | *[!A-Fa-f0-9]*)
+ # "", "/*", etc.
return
;;
- [0-9]*:[0-9]*)
- minor=$(( ${1#*:} ))
- major=$(( ${1%:*} ))
- ;;
- [A-Fa-f0-9]*)
- value=$(( 0x${1} ))
- minor=$(( ${value} % 256 ))
- major=$(( ${value} / 256 ))
- ;;
*)
- return
+ # [A-Fa-f0-9]*
+ value=$(( 0x${1} ))
+ minor=$(( (${value} & 0xff) | (${value} >> 12) & 0xfff00 ))
+ major=$(( (${value} >> 8) & 0xfff ))
;;
esac
- if command -v udevd >/dev/null 2>&1; then
- ROOT=/dev/block/${major}:${minor}
- else
- mknod -m 600 /dev/root b ${major} ${minor}
- ROOT=/dev/root
- fi
+ ROOT="$(readlink -f /dev/block/${major}:${minor})"
}
# Parameter: device node to check