svn commit: r260894 - head/usr.sbin/bsdconfig/share

Devin Teske dteske at FreeBSD.org
Sun Jan 19 21:02:25 UTC 2014


Author: dteske
Date: Sun Jan 19 21:02:24 2014
New Revision: 260894
URL: http://svnweb.freebsd.org/changeset/base/260894

Log:
  Optimize f_expand_number(), improving performance.
  
  MFC After:	3 days

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

Modified: head/usr.sbin/bsdconfig/share/strings.subr
==============================================================================
--- head/usr.sbin/bsdconfig/share/strings.subr	Sun Jan 19 20:32:20 2014	(r260893)
+++ head/usr.sbin/bsdconfig/share/strings.subr	Sun Jan 19 21:02:24 2014	(r260894)
@@ -372,14 +372,13 @@ f_expand_number()
 	local __cp __num __bshift __maxinput
 
 	# Remove any leading non-digits
-	while :; do
-		__cp="$__string"
-		__string="${__cp#[!0-9]}"
-		[ "$__string" = "$__cp" ] && break
-	done
+	__string="${__string#${__string%%[0-9]*}}"
+
+	# Store the numbers (no trailing suffix)
+	__num="${__string%%[!0-9]*}"
 
 	# Produce `-1' if string didn't contain any digits
-	if [ ! "$__string" ]; then
+	if [ ! "$__num" ]; then
 		if [ "$__var_to_set" ]; then
 			setvar "$__var_to_set" -1
 		else
@@ -388,25 +387,8 @@ f_expand_number()
 		return 1 # 1 = "Given $string contains no digits"
 	fi
 
-	# Store the numbers
-	__num="${__string%%[!0-9]*}"
-
-	# Shortcut
-	if [ $__num -eq 0 ]; then
-		if [ "$__var_to_set" ]; then
-			setvar "$__var_to_set" 0
-		else
-			echo 0
-		fi
-		return $SUCCESS
-	fi
-
 	# Remove all the leading numbers from the string to get at the prefix
-	while :; do
-		__cp="$__string"
-		__string="${__cp#[0-9]}"
-		[ "$__string" = "$__cp" ] && break
-	done
+	__string="${__string#"$__num"}"
 
 	#
 	# Test for invalid prefix (and determine bitshift length)


More information about the svn-src-all mailing list