From: Tails developers Date: Mon, 1 Nov 2010 17:23:05 +0000 (+0100) Subject: Factorizing loops on removable/non-removable devices. X-Git-Tag: debian/3.0_a21-1~5 X-Git-Url: http://git.grml.org/?a=commitdiff_plain;h=3f02456e392ead3abf36bc181692fcb75c8f16f3;p=live-boot-grml.git Factorizing loops on removable/non-removable devices. The already duplicated code will be needed a few more times for the upcoming persistent-media={removable,removable-usb} boot option. Copy/pasting it a few more times seems the wrong way to go, hence this factorization. Depending on the place they are used, the newly introduced functions must return a list of devices named either /sys/block/* or /dev/*. Their first parameter therefore specifies the wanted output format (default is /dev/* as it is the most often used). --- diff --git a/scripts/live b/scripts/live index de82082..952d479 100755 --- a/scripts/live +++ b/scripts/live @@ -1693,38 +1693,29 @@ find_livefs () # first look at the one specified in the command line case "${LIVE_MEDIA}" in removable-usb) - for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -vE "/(loop|ram|dm-|fd)") + for sysblock in $(removable_usb_dev "sys") do - if [ "$(cat ${sysblock}/removable)" = "1" ] - then - if readlink ${sysblock} | grep -q usb + for dev in $(subdevices "${sysblock}") + do + if check_dev "${dev}" then - for dev in $(subdevices "${sysblock}") - do - if check_dev "${dev}" - then - return 0 - fi - done + return 0 fi - fi + done done return 1 ;; removable) - for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -vE "/(loop|ram|dm-|fd)") + for sysblock in $(removable_dev "sys") do - if [ "$(cat ${sysblock}/removable)" = "1" ] - then - for dev in $(subdevices "${sysblock}") - do - if check_dev "${dev}" - then - return 0 - fi - done - fi + for dev in $(subdevices "${sysblock}") + do + if check_dev "${dev}" + then + return 0 + fi + done done return 1 ;; @@ -1742,16 +1733,7 @@ find_livefs () # or do the scan of block devices # prefer removable devices over non-removable devices, so scan them first - for sysblock in $(echo /sys/block/* | tr ' ' '\n' | egrep -v "/(loop|ram|dm-|fd)") - do - if [ "$(cat ${sysblock}/removable)" = "1" ] - then - removable_devices_to_scan="$removable_devices_to_scan $sysblock" - else - nonremovable_devices_to_scan="$nonremovable_devices_to_scan $sysblock" - fi - done - devices_to_scan="$removable_devices_to_scan $nonremovable_devices_to_scan" + devices_to_scan="$(removable_dev 'sys') $(non_removable_dev 'sys')" for sysblock in $devices_to_scan do diff --git a/scripts/live-helpers b/scripts/live-helpers index 7f8649f..73d9f9d 100644 --- a/scripts/live-helpers +++ b/scripts/live-helpers @@ -488,3 +488,73 @@ is_luks() fi } + +removable_dev () +{ + output_format="${1}" + want_usb="${2}" + ret= + + for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -vE "/(loop|ram|dm-|fd)") + do + dev_ok= + if [ "$(cat ${sysblock}/removable)" = "1" ] + then + if [ -z "${want_usb}" ] + then + dev_ok="yes" + else + if readlink ${sysblock} | grep -q usb + then + dev_ok="yes" + fi + fi + fi + + if [ "${dev_ok}" = "yes" ] + then + case "${output_format}" in + sys) + ret="${ret} ${sysblock}" + ;; + *) + devname=$(sys2dev "${sysblock}") + ret="${ret} ${devname}" + ;; + esac + fi + done + + echo "${ret}" +} + +removable_usb_dev () +{ + output_format="${1}" + + removable_dev "${output_format}" "want_usb" +} + +non_removable_dev () +{ + output_format="${1}" + ret= + + for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -vE "/(loop|ram|dm-|fd)") + do + if [ "$(cat ${sysblock}/removable)" = "0" ] + then + case "${output_format}" in + sys) + ret="${ret} ${sysblock}" + ;; + *) + devname=$(sys2dev "${sysblock}") + ret="${ret} ${devname}" + ;; + esac + fi + done + + echo "${ret}" +}