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}
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to