Factorizing loops on removable/non-removable devices.
authorTails developers <amnesia@boum.org>
Mon, 1 Nov 2010 17:23:05 +0000 (18:23 +0100)
committerTails developers <amnesia@boum.org>
Wed, 7 Sep 2011 12:53:41 +0000 (14:53 +0200)
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).

scripts/live
scripts/live-helpers

index de82082..952d479 100755 (executable)
@@ -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
index 7f8649f..73d9f9d 100644 (file)
@@ -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}"
+}