svn commit: r316487 - head/etc

Dag-Erling Smørgrav des at FreeBSD.org
Tue Apr 4 11:43:32 UTC 2017


Author: des
Date: Tue Apr  4 11:43:31 2017
New Revision: 316487
URL: https://svnweb.freebsd.org/changeset/base/316487

Log:
  Allow command modifiers (fast, quiet etc.) to be stacked in any order.
  Add a "debug" modifier that sets rc_debug.
  
  MFC after:	3 weeks

Modified:
  head/etc/rc.subr

Modified: head/etc/rc.subr
==============================================================================
--- head/etc/rc.subr	Tue Apr  4 08:17:03 2017	(r316486)
+++ head/etc/rc.subr	Tue Apr  4 11:43:31 2017	(r316487)
@@ -703,10 +703,11 @@ check_startmsgs()
 #	If argument has a given prefix, then change the operation as follows:
 #		Prefix	Operation
 #		------	---------
-#		fast	Skip the pid check, and set rc_fast=yes, rc_quiet=yes
-#		force	Set ${rcvar} to YES, and set rc_force=yes
-#		one	Set ${rcvar} to YES
-#		quiet	Don't output some diagnostics, and set rc_quiet=yes
+#		debug	Enable debugging messages and set rc_debug to yes
+#		fast	Skip the pid check and set rc_fast and rc_quiet to yes
+#		force	Skip sanity checks and set ${rcvar} and rc_force to yes
+#		one	Set ${rcvar} and set rc_one to yes
+#		quiet	Don't output some diagnostics, and set rc_quiet to yes
 #
 #	The following globals are used:
 #
@@ -856,6 +857,8 @@ check_startmsgs()
 #	rc_arg		Argument to command, after fast/force/one processing
 #			performed
 #
+#	rc_debug	True if "debug" was provided
+#
 #	rc_flags	Flags to start the default command with.
 #			Defaults to ${name}_flags, unless overridden
 #			by $flags from the environment.
@@ -863,9 +866,11 @@ check_startmsgs()
 #
 #	rc_pid		PID of command (if appropriate)
 #
-#	rc_fast		Not empty if "fast" was provided (q.v.)
+#	rc_fast		Not empty if "fast" was provided
+#
+#	rc_force	Not empty if "force" was provided
 #
-#	rc_force	Not empty if "force" was provided (q.v.)
+#	rc_one		Not empty if "one" was provided
 #
 #	rc_quiet	Not empty if "quiet" was provided
 #
@@ -884,34 +889,47 @@ run_rc_command()
 	shift 1
 	rc_extra_args="$*"
 
-	_rc_prefix=
-	case "$rc_arg" in
-	fast*)				# "fast" prefix; don't check pid
-		rc_arg=${rc_arg#fast}
-		rc_fast=yes
-		rc_quiet=yes
-		;;
-	force*)				# "force" prefix; always run
-		rc_force=yes
-		_rc_prefix=force
-		rc_arg=${rc_arg#${_rc_prefix}}
-		if [ -n "${rcvar}" ]; then
-			eval ${rcvar}=YES
-		fi
-		;;
-	one*)				# "one" prefix; set ${rcvar}=yes
-		_rc_prefix=one
-		rc_arg=${rc_arg#${_rc_prefix}}
+	: ${rc_debug:=no} ${rc_fast:=no} ${rc_force:=no} ${rc_one:=no} ${rc_quiet:=no}
+	while :; do
+		case "$rc_arg" in
+		debug*)			# "debug" prefix; enable debugging
+			rc_debug=yes
+			rc_quiet=no
+			rc_arg=${rc_arg#debug}
+			_rc_prefix="${_rc_prefix}debug"
+			;;
+		fast*)			# "fast" prefix; don't check pid
+			rc_fast=yes
+			rc_quiet=yes
+			rc_arg=${rc_arg#fast}
+			_rc_prefix="${_rc_prefix}fast"
+			;;
+		force*)			# "force" prefix; always run
+			rc_force=yes
+			rc_arg=${rc_arg#force}
+			_rc_prefix="${_rc_prefix}force"
+			;;
+		one*)			# "one" prefix; set ${rcvar}=yes
+			rc_one=yes
+			rc_arg=${rc_arg#one}
+			_rc_prefix="${_rc_prefix}one"
+			;;
+		quiet*)			# "quiet" prefix; omit some messages
+			rc_quiet=yes
+			rc_arg=${rc_arg#quiet}
+			_rc_prefix="${_rc_prefix}quiet"
+			;;
+		*)
+			break
+			;;
+		esac
+	done
+	if checkyesno rc_force || checkyesno rc_one ; then
 		if [ -n "${rcvar}" ]; then
 			eval ${rcvar}=YES
 		fi
-		;;
-	quiet*)				# "quiet" prefix; omit some messages
-		_rc_prefix=quiet
-		rc_arg=${rc_arg#${_rc_prefix}}
-		rc_quiet=yes
-		;;
-	esac
+	fi
+	debug "_rc_prefix=${_rc_prefix}"
 
 	eval _override_command=\$${name}_program
 	command=${_override_command:-$command}


More information about the svn-src-head mailing list