diff options
| -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);  } | 
