From 9966a902ab375128e128edc4ca85676656b759db Mon Sep 17 00:00:00 2001
From: Roy Marples <roy@marples.name>
Date: Fri, 24 Apr 2009 10:17:53 +0000
Subject: rc-status -c now lists services that have crashed. It returns 0 if
 there are crashed services, otherwise 1. This it easy to restart crashed
 services automatically. More for #120.

---
 src/rc/rc-status.c | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

(limited to 'src/rc')

diff --git a/src/rc/rc-status.c b/src/rc/rc-status.c
index 2f386a41..320b92c8 100644
--- a/src/rc/rc-status.c
+++ b/src/rc/rc-status.c
@@ -172,9 +172,10 @@ print_services(const char *runlevel, RC_STRINGLIST *svcs)
 
 #include "_usage.h"
 #define extraopts "[runlevel1] [runlevel2] ..."
-#define getoptstring "alrsu" getoptstring_COMMON
+#define getoptstring "aclrsu" getoptstring_COMMON
 static const struct option longopts[] = {
 	{"all",         0, NULL, 'a'},
+	{"crashed",     0, NULL, 'c'},
 	{"list",        0, NULL, 'l'},
 	{"runlevel",    0, NULL, 'r'},
 	{"servicelist", 0, NULL, 's'},
@@ -183,6 +184,7 @@ static const struct option longopts[] = {
 };
 static const char * const longopts_help[] = {
 	"Show services from all run levels",
+	"Show crashed services",
 	"Show list of run levels",
 	"Show the name of the current runlevel",
 	"Show service list",
@@ -196,7 +198,7 @@ rc_status(int argc, char **argv)
 {
 	RC_STRING *s, *l, *t;
 	char *p, *runlevel = NULL;
-	int opt, aflag = 0;
+	int opt, aflag = 0, retval = 0;
 
 	test_crashed = _rc_can_find_pids();
 
@@ -207,10 +209,14 @@ rc_status(int argc, char **argv)
 			aflag++;
 			levels = rc_runlevel_list();
 			break;
-		case 'l':
-			levels = rc_runlevel_list();
-			TAILQ_FOREACH (l, levels, entries)
-				printf("%s\n", l->value);
+		case 'c':
+			services = rc_services_in_state(RC_SERVICE_STARTED);
+			retval = 1;
+			TAILQ_FOREACH(s, services, entries)
+				if (rc_service_daemons_crashed(s->value)) {
+					printf("%s\n", s->value);
+					retval = 0;
+				}
 			goto exit;
 			/* NOTREACHED */
 		case 'r':
@@ -344,5 +350,5 @@ exit:
 	rc_deptree_free(deptree);
 #endif
 
-	return(EXIT_SUCCESS);
+	return retval;
 }
-- 
cgit v1.2.3