diff options
author | Roy Marples <roy@marples.name> | 2007-10-15 11:17:57 +0000 |
---|---|---|
committer | Roy Marples <roy@marples.name> | 2007-10-15 11:17:57 +0000 |
commit | f95e75f0e9fece41b8b15c0d810f3ce7561937b8 (patch) | |
tree | ff960fadeb44b75dd5a3e8a886bbc778092b6845 | |
parent | 8ec450eff77a20a66c027d6f9763262614593d64 (diff) |
rc-status now orders services in start order, #195630
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | src/rc-status.c | 17 |
2 files changed, 20 insertions, 1 deletions
@@ -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 <uberlord@gentoo.org>: + + rc-status now orders services in start order, #195630 + * baselayout-2.0.0_rc5 (11 Oct 2007) 11 Oct 2007; Roy Marples <uberlord@gentoo.org>: 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); } |