From a35804263ce5ac47cb5d4819f6b5c9933997c9b0 Mon Sep 17 00:00:00 2001 From: dteske Date: Wed, 15 Jan 2014 07:49:17 +0000 Subject: MFC r259054: Performance and debugging enhancements: + Remove UNAME_P=$(...) from startup/misc -- already supplied by common.subr + Use f_getvar instead of $(eval echo \$$var) -- f_getvar is sub-shell free + Add `-e' and `-k var' options to f_eval_catch -- increasing use-cases + Use f_eval_catch to display errors on failure -- reducing duplicated code + Use f_eval_catch when we need output from a command -- improving debugging + Optimize f_isinter of strings.subr for performance -- now sub-shell free + Improve error checking on pidfiles -- using f_eval_catch and f_isinteger + Use $var_to_set arg of f_ifconfig_{inet,netmask} -- eliminate sub-shells + Use f_sprintf instead of $(printf ...) -- consolidate sub-shells + Use $var_to_set arg of f_route_get_default -- eliminate sub-shells + Add f_count to replace $(set -- ...;echo $#) -- eliminate sub-shells + Add f_count_ifs to replace $(IFS=x;set -- ...;echo $#) -- no sub-shells + Replace var="$var${var:+ }..." in loops with var="$var ..." with a follow- up var="${var# }" to trim leading whitespace -- optimize loops + Use $var_to_set arg of f_resolv_conf_nameservers -- eliminate sub-shells + Comments for the f_eval_catch function + Remove a duplicate `local ... desc ...' in f_device_get_all of device.subr + Use $var_to_set arg of f_device_capacity -- eliminate sub-shells + Whitespace fixes in f_dialog_init of dialog.subr + Optimize f_inet_atoi of media/tcpip.subr for performance -- sub-shell free + In several cases, send stderr to /dev/null -- clean up runtime execution + Change f_err of common.subr to go to program stderr not terminal stderr, allowing redirection of output from functions that use f_err + Disable debugging when using f_getvar to get variable argument to f_startup_rcconf_map_expand of startup/rcconf.subr + Use f_replace_all instead of $(echo ... | tr | sed) -- performance + Add a $var_to_set option to f_index_{file,menusel_{command,keyword}} of common.subr -- centralize sub-shells --- usr.sbin/bsdconfig/share/media/cdrom.subr | 24 +++++++++++++++--------- usr.sbin/bsdconfig/share/media/common.subr | 23 +++++++++-------------- usr.sbin/bsdconfig/share/media/dos.subr | 19 +++++++++++-------- usr.sbin/bsdconfig/share/media/floppy.subr | 21 +++++++++++++-------- usr.sbin/bsdconfig/share/media/ftp.subr | 6 ++++-- usr.sbin/bsdconfig/share/media/nfs.subr | 19 +++++++++++-------- usr.sbin/bsdconfig/share/media/tcpip.subr | 17 ++++++++++------- usr.sbin/bsdconfig/share/media/ufs.subr | 19 +++++++++++-------- usr.sbin/bsdconfig/share/media/usb.subr | 20 ++++++++++++-------- 9 files changed, 96 insertions(+), 72 deletions(-) (limited to 'usr.sbin/bsdconfig/share/media') diff --git a/usr.sbin/bsdconfig/share/media/cdrom.subr b/usr.sbin/bsdconfig/share/media/cdrom.subr index 7f8b523..f14021e 100644 --- a/usr.sbin/bsdconfig/share/media/cdrom.subr +++ b/usr.sbin/bsdconfig/share/media/cdrom.subr @@ -58,7 +58,7 @@ f_media_set_cdrom() local devs ndevs f_device_find "" $DEVICE_TYPE_CDROM devs - ndevs=$( set -- $devs; echo $# ) + f_count ndevs $devs if [ ${ndevs:=0} -eq 0 ]; then f_interactive && f_show_msg "$msg_no_cd_dvd_devices_found" @@ -95,6 +95,7 @@ f_media_set_cdrom() # f_media_init_cdrom() { + local funcname=f_media_init_cdrom local dev="$1" devname err device_$dev get devname devname || return $FAILURE @@ -106,14 +107,13 @@ f_media_init_cdrom() return $SUCCESS fi - if [ ! -e "$MOUNTPOINT" ] && - ! err=$( mkdir -p "$MOUNTPOINT" 2>&1 ) - then - f_dialog_msgbox "$err" - return $FAILURE + if [ ! -e "$MOUNTPOINT" ]; then + f_eval_catch $funcname mkdir 'mkdir -p "%s"' "$MOUNTPOINT" || + return $FAILURE fi - if ! err=$( mount_cd9660 "$devname" "$MOUNTPOINT" 2>&1 ) + if ! f_eval_catch -dk err $funcname mount_cd9660 \ + 'mount_cd9660 "%s" "%s"' "$devname" "$MOUNTPOINT" then err="${err#mount_cd9660: }"; err="${err#$devname: }" case "$err" in @@ -167,6 +167,7 @@ f_media_get_cdrom() # f_media_shutdown_cdrom() { + local funcname=f_media_shutdown_cdrom local dev="$1" err [ "$CDROM_MOUNTED" ] || return $FAILURE @@ -176,7 +177,9 @@ f_media_shutdown_cdrom() return $SUCCESS fi - if ! err=$( umount -f "$MOUNTPOINT" 2>&1 ); then + if ! f_eval_catch -dk err $funcname umount \ + 'umount -f "%s"' "$MOUNPOINT" + then err="${err#umount: }"; err="${err#*: }" f_show_msg "$msg_could_not_unmount_the_cdrom_dvd" \ "$MOUNTPOINT" "$err" @@ -191,11 +194,14 @@ f_media_shutdown_cdrom() # f_media_eject_cdrom() { + local funcname=f_media_eject_cdrom local dev="$1" devname err device_$dev get name devname || return $SUCCESS case "$devname" in /dev/iso9660/*) return $SUCCESS; esac f_dprintf "Ejecting CDROM/DVD at %s" "$devname" - if ! err=$( cdcontrol -f "$devname" eject 2>&1 ); then + if ! f_eval_catch -dk err $funcname cdcontrol \ + 'cdcontrol -f "%s" eject' "$devname" + then f_dprintf "Could not eject the CDROM/DVD from %s: %s" \ "$devname" "${err#cdcontrol: }" fi diff --git a/usr.sbin/bsdconfig/share/media/common.subr b/usr.sbin/bsdconfig/share/media/common.subr index 01d50a1..aac2cdd 100644 --- a/usr.sbin/bsdconfig/share/media/common.subr +++ b/usr.sbin/bsdconfig/share/media/common.subr @@ -99,6 +99,7 @@ f_media_verify() # f_media_generic_get() { + local funcname=f_media_generic_get local base="$1" file="$2" probe_type="$3" local fname=f_media_generic_get @@ -117,13 +118,10 @@ f_media_generic_get() f_dprintf "%s: file exists path=[%s]" $fname "$path" if [ "$probe_type" = "$PROBE_SIZE" ]; then local size - if ! size=$( stat -f %z "$path" 2>&1 ); then - f_dprintf "stat: %s" "$size" - echo "-1" - else - f_isinteger "$size" || size=-1 - echo $size - fi + f_eval_catch -dk size $funcname stat \ + 'stat -f %%z "%s"' "$path" || size=-1 + f_isinteger "$size" || size=-1 + echo $size fi [ "$probe_type" ] && return $SUCCESS cat "$path" @@ -136,13 +134,10 @@ f_media_generic_get() f_dprintf "%s: file exists path=[%s]" $fname "$path" if [ "$probe_type" = "$PROBE_SIZE" ]; then local size - if ! size=$( stat -f %z "$path" 2>&1 ); then - f_dprintf "stat: %s" "$size" - echo "-1" - else - f_isinteger "$size" || size=-1 - echo $size - fi + f_eval_catch -dk size $funcname stat \ + 'stat -f %%z "%s"' "$path" || size=-1 + f_isinteger "$size" || size=-1 + echo $size fi [ "$probe_type" ] && return $SUCCESS elif [ "$probe_type" ]; then diff --git a/usr.sbin/bsdconfig/share/media/dos.subr b/usr.sbin/bsdconfig/share/media/dos.subr index be4cfc7..e8e6aa6 100644 --- a/usr.sbin/bsdconfig/share/media/dos.subr +++ b/usr.sbin/bsdconfig/share/media/dos.subr @@ -56,7 +56,7 @@ f_media_set_dos() local devs ndevs f_device_find "" $DEVICE_TYPE_DOS devs - ndevs=$( set -- $devs; echo $# ) + f_count ndevs $devs if [ ${ndevs:=0} -eq 0 ]; then f_show_msg "$msg_no_dos_primary_partitions_found" @@ -93,6 +93,7 @@ f_media_set_dos() # f_media_init_dos() { + local funcname=f_media_init_dos local dev="$1" devname err device_$dev get devname devname || return $FAILURE @@ -104,14 +105,13 @@ f_media_init_dos() return $SUCCESS fi - if [ ! -e "$MOUNTPOINT" ] && - ! err=$( mkdir -p "$MOUNTPOINT" 2>&1 ) - then - f_dialog_msgbox "$err" - return $FAILURE + if [ ! -e "$MOUNTPOINT" ]; then + f_eval_catch $funcname mkdir 'mkdir -p "%s"' "$MOUNTPOINT" || + return $FAILURE fi - if ! err=$( mount_msdosfs "$devname" "$MOUNTPOINT" 2>&1 ) + if ! f_eval_catch -dk err $funcname mount_msdosfs \ + 'mount_msdosfs "%s" "%s"' "$devname" "$MOUNTPOINT" then err="${err#mount_msdosfs: }"; err="${err#$devname: }" f_show_msg "$msg_error_mounting_device" \ @@ -146,11 +146,14 @@ f_media_get_dos() # f_media_shutdown_dos() { + local funcname=f_media_shutdown_dos local dev="$1" err [ "$DOS_MOUNTED" ] || return $FAILURE - if ! err=$( umount -f "$MOUNTPOINT" 2>&1 ); then + if ! f_eval_catch -dk err $funcname umount \ + 'umount -f "%s"' "$MOUNTPOINT" + then err="${err#umount: }"; err="${err#*: }" f_show_msg "$msg_could_not_unmount_the_dos_partition" \ "$MOUNTPOINT" "$err" diff --git a/usr.sbin/bsdconfig/share/media/floppy.subr b/usr.sbin/bsdconfig/share/media/floppy.subr index 62fe64b..e0e2df4 100644 --- a/usr.sbin/bsdconfig/share/media/floppy.subr +++ b/usr.sbin/bsdconfig/share/media/floppy.subr @@ -57,7 +57,7 @@ f_media_set_floppy() local devs ndevs f_device_find "" $DEVICE_TYPE_FLOPPY devs - ndevs=$( set -- $devs; echo $# ) + f_count ndevs $devs if [ ${ndevs:=0} -eq 0 ]; then f_interactive && f_show_msg "$msg_no_floppy_devices_found" @@ -98,6 +98,7 @@ f_media_set_floppy() # f_media_init_floppy() { + local funcname=f_media_init_floppy local dev="$1" devname err device_$dev get devname devname || return $FAILURE @@ -129,8 +130,11 @@ f_media_init_floppy() fi if ! { - f_quietly mount_msdosfs -o ro -m 0777 -u 0 -g 0 "$devname" "$mp" || - err=$( mount -o ro "$devname" "$mp" 2>&1 ) + f_eval_catch -dk err $funcname mount_msdosfs \ + 'mount_msdosfs -o ro -m 0777 -u 0 -g 0 "%s" "%s"' \ + "$devname" "$mp" || + f_eval_catch -dk err $funcname mount \ + 'mount -o ro "%s" "%s"' "$devname" "$mp" }; then err="${err#mount: }"; err="${err#*: }" local name @@ -153,6 +157,7 @@ f_media_init_floppy() # f_media_get_floppy() { + local funcname=f_media_get_floppy local dev="$1" file="$2" probe_type="$3" f_dprintf "f_media_get_floppy: dev=[%s] file=[%s] probe_type=%s" \ @@ -188,7 +193,7 @@ f_media_get_floppy() # if [ "$probe_type" = "$PROBE_SIZE" ]; then local size - size=$( stat -f %z "$fp" 2>&1 ) || f_dprintf "stat: %s" "$size" + f_eval_catch -dk size $funcname stat 'stat -f %%z "%s"' "$fp" f_isinteger "$size" || size=-1 echo "$size" fi @@ -203,15 +208,15 @@ f_media_get_floppy() # f_media_shutdown_floppy() { + local funcname=f_media_shutdown_floppy local dev="$1" err mp [ "$FLOPPY_MOUNTED" ] || return $FAILURE device_$dev get private mp - if ! err=$( umount -f "${mp:=$MOUNTPOINT}" 2>&1 ); then - err="${err#umount: }"; err="${err#*:}" - f_dprintf "Umount of floppy on %s failed: %s" "$mp" "$err" - else + if f_eval_catch -d $funcname umount \ + 'umount -f "%s"' "${mp:=$MOUNTPOINT}" + then FLOPPY_MOUNTED= if f_interactive && [ "$_systemState" != "fixit" ]; then local desc diff --git a/usr.sbin/bsdconfig/share/media/ftp.subr b/usr.sbin/bsdconfig/share/media/ftp.subr index d7f33bb..7f5256a3 100644 --- a/usr.sbin/bsdconfig/share/media/ftp.subr +++ b/usr.sbin/bsdconfig/share/media/ftp.subr @@ -794,6 +794,7 @@ f_media_init_ftp() # f_media_get_ftp() { + local funcname=f_media_get_ftp local dev="$1" file="$2" probe_type="$3" hosts= f_dprintf "f_media_get_ftp: dev=[%s] file=[%s] probe_type=%s" \ @@ -870,9 +871,10 @@ f_media_get_ftp() if [ "$probe_type" ]; then local url="ftp://$userpass$host$port/$dir/$file" size [ "$use_anon" ] && url="ftp://$host$port/$dir/$file" - if ! size=$( fetch -s "$url" 2>&1 ) || ! f_isinteger "$size" + if ! f_eval_catch -dk size $funcname fetch \ + 'fetch -s "%s"' "$url" || ! f_isinteger "$size" then - f_dprintf "request failed! size response=[%s]" "$size" + f_dprintf "size request failed!" [ "$probe_type" = "$PROBE_SIZE" ] && echo "-1" return $FAILURE fi diff --git a/usr.sbin/bsdconfig/share/media/nfs.subr b/usr.sbin/bsdconfig/share/media/nfs.subr index 8db5a06..33b37c8 100644 --- a/usr.sbin/bsdconfig/share/media/nfs.subr +++ b/usr.sbin/bsdconfig/share/media/nfs.subr @@ -154,6 +154,7 @@ f_media_set_nfs() # f_media_init_nfs() { + local funcname=f_media_init_nfs local dev="$1" name err device_$dev get name name || return $FAILURE @@ -170,11 +171,9 @@ f_media_init_nfs() return $FAILURE fi - if [ ! -e "$MOUNTPOINT" ] && - ! err=$( mkdir -p "$MOUNTPOINT" 2>&1 ) - then - f_dialog_msgbox "$err" - return $FAILURE + if [ ! -e "$MOUNTPOINT" ]; then + f_eval_catch $funcname mkdir 'mkdir -p "%s"' "$MOUNTPOINT" || + return $FAILURE fi local cp tcp="" use3="" secure="" readsize=4096 writesize=4096 @@ -191,8 +190,9 @@ f_media_init_nfs() [ "$use3" ] && options="$options,nfsv3" [ "$tcp" ] && options="$options,tcp" - if ! err=$( mount_nfs \ - ${secure:+-P} -o "$options" "$name" "$MOUNTPOINT" 2>&1 ) + if ! f_eval_catch -dk err $funcname mount_nfs \ + 'mount_nfs %s -o "%s" "%s" "%s"' \ + "${secure:+-P}" "$options" "$name" "$MOUNTPOINT" then err="${err#mount_nfs: }" f_show_msg "$msg_error_mounting_device" \ @@ -231,12 +231,15 @@ f_media_get_nfs() # f_media_shutdown_nfs() { + local funcname=f_media_shutdown_nfs local dev="$1" err [ "$NFS_MOUNTED" ] || return $FAILURE f_dprintf "Unmounting NFS partition on %s" "$MOUNTPOINT" - if ! err=$( umount -f "$MOUNTPOINT" 2>&1 ); then + if ! f_eval_catch -dk err $funcname umount \ + 'umount -f "%s"' "$MOUNTPOINT" + then err="${err#umount: }"; err="${err#*: }" f_show_msg "$msg_could_not_unmount_the_nfs_partition" \ "$MOUNTPOINT" "$err" diff --git a/usr.sbin/bsdconfig/share/media/tcpip.subr b/usr.sbin/bsdconfig/share/media/tcpip.subr index edbdb7e..ea7350d8 100644 --- a/usr.sbin/bsdconfig/share/media/tcpip.subr +++ b/usr.sbin/bsdconfig/share/media/tcpip.subr @@ -33,6 +33,7 @@ BSDCFG_SHARE="/usr/share/bsdconfig" f_dprintf "%s: loading includes..." media/tcpip.subr f_include $BSDCFG_SHARE/device.subr f_include $BSDCFG_SHARE/dialog.subr +f_include $BSDCFG_SHARE/strings.subr f_include $BSDCFG_SHARE/struct.subr f_include $BSDCFG_SHARE/variable.subr @@ -168,8 +169,9 @@ f_inet_atoi() { local __addr="$1" __var_to_set="$2" __num=0 if f_validate_ipaddr "$__addr"; then - __num=$( IFS=.; set -- $__addr; \ - echo $(( ($1 << 24) + ($2 << 16) + ($3 << 8) + $4 )) ) + IFS=. + set -- $__addr + __num=$(( ($1 << 24) + ($2 << 16) + ($3 << 8) + $4 )) fi if [ "$__var_to_set" ]; then setvar "$__var_to_set" $__num @@ -574,7 +576,7 @@ f_ifconfig_netmask() local __octet __netmask= for __octet in $__octets; do - __netmask="$__netmask.$( printf "%u" "0x$__octet" )" + f_sprintf __netmask "%s.%u" "$__netmask" "0x$__octet" done __netmask="${__netmask#.}" if [ "$__var_to_set" ]; then @@ -1035,10 +1037,11 @@ f_host_lookup() # Calculate wait time as dividend of total time and host(1) invocations local __host_runs __wait + f_count __host_runs $__srvtypes if [ "$__ip6" = "YES" ]; then - __host_runs=$(( 2 + $( set -- $__srvtypes; echo $# ) )) + __host_runs=$(( $__host_runs + 2 )) else - __host_runs=$(( 1 + $( set -- $__srvtypes; echo $# ) )) + __host_runs=$(( $__host_runs + 1 )) fi f_getvar $VAR_MEDIA_TIMEOUT __wait [ "$__wait" ] && __wait="-W $(( $__wait / $__host_runs ))" @@ -1614,7 +1617,7 @@ f_device_select_tcp() esac f_device_find "$dev" $DEVICE_TYPE_NETWORK devs - cnt=$( set -- $devs; echo $# ) + f_count cnt $devs if [ ${cnt:=0} -gt 0 ]; then dev="${devs%%[$IFS]*}" @@ -1632,7 +1635,7 @@ f_device_select_tcp() fi # $network_dev f_device_find "" $DEVICE_TYPE_NETWORK devs - cnt=$( set -- $devs; echo $# ) + f_count cnt $devs dev="${devs%%[$IFS]*}" f_quietly f_getvar NETWORK_CONFIGURED # for debugging info diff --git a/usr.sbin/bsdconfig/share/media/ufs.subr b/usr.sbin/bsdconfig/share/media/ufs.subr index 2de29b3..a16b53d 100644 --- a/usr.sbin/bsdconfig/share/media/ufs.subr +++ b/usr.sbin/bsdconfig/share/media/ufs.subr @@ -67,7 +67,7 @@ f_media_set_ufs() local devs ndevs f_device_find "" $DEVICE_TYPE_UFS devs - ndevs=$( set -- $devs; echo $# ) + f_count ndevs $devs if [ ${ndevs:=0} -eq 0 ]; then f_variable_get_value $VAR_UFS_PATH \ @@ -117,6 +117,7 @@ f_media_set_ufs() # f_media_init_ufs() { + local funcname=f_media_init_ufs local dev="$1" devname err device_$dev get devname devname || return $FAILURE @@ -134,14 +135,13 @@ f_media_init_ufs() return $FAILURE fi - if [ ! -e "$MOUNTPOINT" ] && - ! err=$( mkdir -p "$MOUNTPOINT" 2>&1 ) - then - f_dialog_msgbox "$err" - return $FAILURE + if [ ! -e "$MOUNTPOINT" ]; then + f_eval_catch $funcname mkdir 'mkdir -p "%s"' "$MOUNTPOINT" || + return $FAILURE fi - if ! err=$( mount "$devname" "$MOUNTPOINT" 2>&1 ) + if ! f_eval_catch -dk err $funcname mount \ + 'mount "%s" "%s"' "$devname" "$MOUNTPOINT" then err="${err#mount: }"; err="${err#$devname : }" f_show_msg "$msg_error_mounting_device" \ @@ -175,11 +175,14 @@ f_media_get_ufs() # f_media_shutdown_ufs() { + local funcname=f_media_shutdown_ufs local dev="$1" err [ "$UFS_MOUNTED" ] || return $FAILURE - if ! err=$( umount -f "$MOUNTPOINT" 2>&1 ); then + if ! f_eval_catch -dk err $funcname umount \ + 'umount -f "%s"' "$MOUNTPOINT" + then err="${err#umount: }"; err="${err#*: }" f_show_msg "$msg_could_not_unmount_the_ufs_partition" \ "$MOUNTPOINT" "$err" diff --git a/usr.sbin/bsdconfig/share/media/usb.subr b/usr.sbin/bsdconfig/share/media/usb.subr index f7afc29..39384fa 100644 --- a/usr.sbin/bsdconfig/share/media/usb.subr +++ b/usr.sbin/bsdconfig/share/media/usb.subr @@ -57,7 +57,7 @@ f_media_set_usb() local devs ndevs f_device_find "" $DEVICE_TYPE_USB devs - ndevs=$( set -- $devs; echo $# ) + f_count ndevs $devs if [ ${ndevs:=0} -eq 0 ]; then f_show_msg "$msg_no_usb_devices_found" @@ -103,6 +103,7 @@ f_media_set_usb() # f_media_init_usb() { + local funcname=f_media_init_usb local dev="$1" devname err device_$dev get devname devname || return $FAILURE @@ -114,14 +115,14 @@ f_media_init_usb() return $SUCCESS fi - if [ ! -e "$MOUNTPOINT" ] && - ! err=$( mkdir -p "$MOUNTPOINT" 2>&1 ) - then - f_dialog_msgbox "$err" - return $FAILURE + if [ ! -e "$MOUNTPOINT" ]; then + f_eval_catch $funcname mkdir 'mkdir -p "%s"' "$MOUNTPOINT" || + return $FAILURE fi - if err=$( mount "$devname" "$MOUNTPOINT" 2>&1 ); then + if f_eval_catch -dk err $funcname mount \ + 'mount "%s" "%s"' "$devname" "$MOUNTPOINT" + then USB_MOUNTED=1 return $SUCCESS fi @@ -156,11 +157,14 @@ f_media_get_usb() # f_media_shutdown_usb() { + local funcname=f_media_shutdown_usb local dev="$1" err [ "$USB_MOUNTED" ] || return $FAILURE - if ! err=$( umount -f "$MOUNTPOINT" 2>&1 ); then + if ! f_eval_catch -dk err $funcname umount \ + 'umount -f "%s"' "$MOUNTPOINT" + then err="${err#umount: }"; err="${err#*: }" f_show_msg "$msg_could_not_unmount_the_ufs_partition" \ "$MOUNTPOINT" "$err" -- cgit v1.1