diff options
author | Ben Hutchings <ben@decadent.org.uk> | 2015-12-11 18:45:13 +0000 |
---|---|---|
committer | Ben Hutchings <ben@decadent.org.uk> | 2015-12-11 18:45:13 +0000 |
commit | ad90a289d30b7e9e0522b297f717b3e363ee4ab7 (patch) | |
tree | 2ccc33c71196435d2c6ec5e23749f8431a5d1a51 /scripts/functions | |
parent | df86688b1e35d80c565eeb26c3c5d7e6664c4a83 (diff) | |
parent | 88f98b5c2345c574763f219afeecf42074d580c7 (diff) |
Merge branch 'benh/parse-numeric-fixes'
Diffstat (limited to 'scripts/functions')
-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 |