summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2007-10-15 11:17:57 +0000
committerRoy Marples <roy@marples.name>2007-10-15 11:17:57 +0000
commitf95e75f0e9fece41b8b15c0d810f3ce7561937b8 (patch)
treeff960fadeb44b75dd5a3e8a886bbc778092b6845 /src
parent8ec450eff77a20a66c027d6f9763262614593d64 (diff)
downloadopenrc-f95e75f0e9fece41b8b15c0d810f3ce7561937b8.tar.gz
openrc-f95e75f0e9fece41b8b15c0d810f3ce7561937b8.tar.bz2
openrc-f95e75f0e9fece41b8b15c0d810f3ce7561937b8.tar.xz
rc-status now orders services in start order, #195630
Diffstat (limited to 'src')
-rw-r--r--src/rc-status.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/rc-status.c b/src/rc-status.c
index 77654c2..0db3c90 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);
}