Add support for obtaining the capacity of disks. Add comment while here.

Approved by:	re (glebius)
This commit is contained in:
Devin Teske 2013-10-11 17:52:43 +00:00
parent c1215c324a
commit 6bfa4a638c

View File

@ -49,6 +49,7 @@ f_struct_define DEVICE \
desc \
devname \
type \
capacity \
enabled \
init \
get \
@ -114,7 +115,7 @@ f_device_try()
}
# f_device_register $name $desc $devname $type $enabled $init_function \
# $get_function $shutdown_function $private
# $get_function $shutdown_function $private $capacity
#
# Register a device. A `structure' (see struct.subr) is created with the name
# device_$name (so make sure $name contains only alpha-numeric characters or
@ -128,6 +129,7 @@ f_device_register()
{
local name="$1" desc="$2" devname="$3" type="$4" enabled="$5"
local init_func="$6" get_func="$7" shutdown_func="$8" private="$9"
local capacity="${10}"
f_struct_new DEVICE "device_$name" || return $FAILURE
device_$name set name "$name"
@ -139,6 +141,7 @@ f_device_register()
device_$name set get "$get_func"
device_$name set shutdown "$shutdown_func"
device_$name set private "$private"
device_$name set capacity "$capacity"
# Scan our global register to see if it needs ammending
local dev found=
@ -196,7 +199,7 @@ f_device_get_all()
f_dprintf "Found a network device named %s" "$devname"
f_device_register $devname \
"$desc" "$devname" $DEVICE_TYPE_NETWORK 1 \
f_media_init_network "" f_media_shutdown_network ""
f_media_init_network "" f_media_shutdown_network "" -1
done
# Next, try to find all the types of devices one might use
@ -208,6 +211,10 @@ f_device_get_all()
n=$(( $n + 1 ))
# Get the desc, type, and max (with debugging disabled)
# NOTE: Bypassing f_device_name_get() for efficiency
# ASIDE: This would be equivalent to the following:
# debug= f_device_name_get $dev desc
# debug= f_device_name_get $dev type
# debug= f_device_name_get $dev max
debug= f_getvar _device_desc$n desc
debug= f_getvar _device_type$n type
debug= f_getvar _device_max$n max
@ -222,7 +229,8 @@ f_device_get_all()
f_device_register "${devname##*/}" "$desc" \
"$devname" $DEVICE_TYPE_CDROM 1 \
f_media_init_cdrom f_media_get_cdrom \
f_media_shutdown_cdrom ""
f_media_shutdown_cdrom "" \
"$( f_device_capacity "$devname" )"
f_dprintf "Found a CDROM device for %s" \
"$devname"
;;
@ -232,7 +240,8 @@ f_device_get_all()
"$devname" $DEVICE_TYPE_FLOPPY 1 \
f_media_init_floppy \
f_media_get_floppy \
f_media_shutdown_floppy ""
f_media_shutdown_floppy "" \
"$( f_device_capacity "$devname" )"
f_dprintf "Found a floppy device for %s" \
"$devname"
;;
@ -241,7 +250,8 @@ f_device_get_all()
f_device_register "${devname##*/}" "$desc" \
"$devname" $DEVICE_TYPE_USB 1 \
f_media_init_usb f_media_get_usb \
f_media_shutdown_usb ""
f_media_shutdown_usb "" \
"$( f_device_capacity "$devname" )"
f_dprintf "Found a USB disk for %s" "$devname"
;;
esac
@ -254,7 +264,8 @@ f_device_get_all()
f_device_register "${devname##*/}" "ISO9660 file system" \
"$devname" $DEVICE_TYPE_CDROM 1 \
f_media_init_cdrom f_media_get_cdrom \
f_media_shutdown_cdrom ""
f_media_shutdown_cdrom "" \
"$( f_device_capacity "$devname" )"
f_dprintf "Found a CDROM device for %s" "$devname"
done
@ -281,7 +292,8 @@ f_device_get_all()
"md(4) vnode file system" \
"$devname" $DEVICE_TYPE_CDROM 1 \
f_media_init_cdrom f_media_get_cdrom \
f_media_shutdown_cdrom ""
f_media_shutdown_cdrom "" \
"$( f_device_capacity "$devname" )"
f_dprintf "Found a CDROM device for %s" "$devname"
;;
esac
@ -327,7 +339,8 @@ f_device_get_all()
f_device_register "$slice" "" \
"/dev/$slice" $DEVICE_TYPE_DOS 1 \
f_media_init_dos f_media_get_dos \
f_media_shutdown_dos ""
f_media_shutdown_dos "" \
"$( f_device_capacity "/dev/$slice" )"
f_dprintf "Found a DOS partition %s" "$slice"
;;
0xa5) # FreeBSD partition
@ -347,7 +360,9 @@ f_device_get_all()
$DEVICE_TYPE_UFS 1 \
f_media_init_ufs \
f_media_get_ufs \
f_media_shutdown_ufs ""
f_media_shutdown_ufs "" \
"$( f_device_capacity \
"$/dev/$part" )"
f_dprintf "Found a UFS partition %s" \
"$part"
done # parts
@ -655,6 +670,25 @@ f_device_menu()
return $retval
}
# f_device_capacity $device [$var_to_set]
#
# Return the capacity of $device in bytes.
#
f_device_capacity()
{
local __dev="$1" __var_to_set="$2"
local __bytes
__bytes=$( diskinfo -v "$__dev" 2> /dev/null |
awk '/# mediasize in bytes/{print $1}' ) || __bytes=-1
if [ "$__var_to_set" ]; then
setvar "$__var_to_set" "$__bytes"
else
echo "$__bytes"
fi
}
#
# Short-hand
#