aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--src/rc-status.c17
2 files changed, 20 insertions, 1 deletions
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 <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);
}