diff options
-rw-r--r-- | scripts/functions | 36 |
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 |