From 5b1aaf8cc803e9f21f8a0c94236ab5dddba4b2fc Mon Sep 17 00:00:00 2001 From: William Hubbs Date: Mon, 17 Oct 2011 13:47:45 -0500 Subject: [PATCH] add support for extra_stopped_commands --- man/runscript.8 | 3 +++ sh/runscript.sh.in | 17 ++++++++++++++--- src/librc/librc.c | 4 +++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/man/runscript.8 b/man/runscript.8 index bf06d7bc..b28bec29 100644 --- a/man/runscript.8 +++ b/man/runscript.8 @@ -93,6 +93,9 @@ Space separated list of extra commands the service defines. .It Ar extra_started_commands Space separated list of extra commands the service defines. These only work if the service has already been started. +.It Ar extra_stopped_commands +Space separated list of extra commands the service defines. These only work if +the service has already been stopped. .It Ar description String describing the service. .It Ar description_$command diff --git a/sh/runscript.sh.in b/sh/runscript.sh.in index 010c794f..f86a5107 100644 --- a/sh/runscript.sh.in +++ b/sh/runscript.sh.in @@ -98,7 +98,8 @@ describe() fi local svc= desc= - for svc in ${extra_commands:-$opts} $extra_started_commands; do + for svc in ${extra_commands:-$opts} $extra_started_commands \ + $extra_stopped_commands; do eval desc=\$description_$svc if [ -n "$desc" ]; then einfo "$HILITE$svc$NORMAL: $desc" @@ -213,7 +214,7 @@ unset _f if [ -n "$opts" ]; then ewarn "Use of the opts variable is deprecated and will be" ewarn "removed in the future." - ewarn "Please use extra_commands or extra_started_commands." + ewarn "Please use extra_commands, extra_started_commands or extra_stopped_commands." fi while [ -n "$1" ]; do @@ -225,7 +226,7 @@ while [ -n "$1" ]; do fi # See if we have the required function and run it for _cmd in describe start stop status ${extra_commands:-$opts} \ - $extra_started_commands + $extra_started_commands $extra_stopped_commands do if [ "$_cmd" = "$1" ]; then if [ "$(command -v "$1")" = "$1" ]; then @@ -253,6 +254,16 @@ while [ -n "$1" ]; do fi fi done + # Check to see if we need to be stopped before + # we can run this command + for _cmd in $extra_stopped_commands; do + if [ "$_cmd" = "$1" ]; then + if ! service_stopped; then + eerror "$RC_SVCNAME: cannot \`$1' as it has not been stopped" + exit 1 + fi + fi + done unset _cmd if [ "$(command -v "$1_pre")" = "$1_pre" ] then diff --git a/src/librc/librc.c b/src/librc/librc.c index c66c944f..13c19731 100644 --- a/src/librc/librc.c +++ b/src/librc/librc.c @@ -526,7 +526,9 @@ rc_service_exists(const char *service) } librc_hidden_def(rc_service_exists) -#define OPTSTR ". '%s'; echo $extra_commands $extra_started_commands" +#define OPTSTR \ +". '%s'; echo $extra_commands $extra_started_commands $extra_stopped_commands" + RC_STRINGLIST * rc_service_extra_commands(const char *service) {