Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 11 Oct 2013 17:52:44 +0000 (UTC)
From:      Devin Teske <dteske@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r256321 - head/usr.sbin/bsdconfig/share
Message-ID:  <201310111752.r9BHqikM015027@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dteske
Date: Fri Oct 11 17:52:43 2013
New Revision: 256321
URL: http://svnweb.freebsd.org/changeset/base/256321

Log:
  Add support for obtaining the capacity of disks. Add comment while here.
  
  Approved by:	re (glebius)

Modified:
  head/usr.sbin/bsdconfig/share/device.subr

Modified: head/usr.sbin/bsdconfig/share/device.subr
==============================================================================
--- head/usr.sbin/bsdconfig/share/device.subr	Fri Oct 11 17:39:33 2013	(r256320)
+++ head/usr.sbin/bsdconfig/share/device.subr	Fri Oct 11 17:52:43 2013	(r256321)
@@ -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
 #



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201310111752.r9BHqikM015027>