From f95e75f0e9fece41b8b15c0d810f3ce7561937b8 Mon Sep 17 00:00:00 2001 From: Roy Marples Date: Mon, 15 Oct 2007 11:17:57 +0000 Subject: [PATCH] rc-status now orders services in start order, #195630 --- ChangeLog | 4 ++++ src/rc-status.c | 17 ++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 8be2aaa7..bdb1db4a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,10 @@ # ChangeLog for Gentoo System Intialization ("rc") scripts # Copyright 1999-2007 Gentoo Foundation; Distributed under the GPLv2 + 15 Oct 2007; Roy Marples : + + rc-status now orders services in start order, #195630 + * baselayout-2.0.0_rc5 (11 Oct 2007) 11 Oct 2007; Roy Marples : diff --git a/src/rc-status.c b/src/rc-status.c index 77654c25..0db3c905 100644 --- a/src/rc-status.c +++ b/src/rc-status.c @@ -19,6 +19,8 @@ #define APPLET "rc-status" +static char const *types[] = { "ineed", "iuse", "iafter", NULL }; + static void print_level (char *level) { printf ("Runlevel: %s%s%s\n", @@ -81,8 +83,10 @@ static const char * const longopts_help[] = { int rc_status (int argc, char **argv) { + rc_depinfo_t *deptree = NULL; char **levels = NULL; char **services = NULL; + char **ordered = NULL; char *level; char *service; int opt; @@ -135,15 +139,26 @@ int rc_status (int argc, char **argv) free (level); } + /* Output the services in the order in which they would start */ + deptree = rc_deptree_load (); STRLIST_FOREACH (levels, level, i) { print_level (level); services = rc_services_in_runlevel (level); + if (deptree) { + ordered = rc_deptree_depends (deptree, (char **) types, services, + level, RC_DEP_STRICT | RC_DEP_START); + rc_strlist_free (services); + services = ordered; + ordered = NULL; + } STRLIST_FOREACH (services, service, j) - print_service (service); + if (rc_service_in_runlevel (service, level)) + print_service (service); rc_strlist_free (services); } rc_strlist_free (levels); + rc_deptree_free (deptree); return (EXIT_SUCCESS); }