diff options
| author | Roy Marples <roy@marples.name> | 2007-10-05 10:16:14 +0000 | 
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2007-10-05 10:16:14 +0000 | 
| commit | 05b8eff319536ade894d07705bc74abaf425788e (patch) | |
| tree | 499e2bdf43323f6b3901ff11685fba71cc813cb5 /src/rc.c | |
| parent | efe6e76cc14fb92c2784ef29d40ef42860078d74 (diff) | |
| download | openrc-05b8eff319536ade894d07705bc74abaf425788e.tar.xz | |
Punt rc_ls_dir
Diffstat (limited to 'src/rc.c')
| -rw-r--r-- | src/rc.c | 100 | 
1 files changed, 49 insertions, 51 deletions
| @@ -20,6 +20,7 @@  #include <sys/utsname.h>  #include <sys/wait.h>  #include <errno.h> +#include <dirent.h>  #include <ctype.h>  #include <getopt.h>  #include <libgen.h> @@ -331,7 +332,7 @@ static int do_mark_service (int argc, char **argv)  				eerror ("%s: failed to signal parent %d: %s",  						applet, pid, strerror (errno)); -		/* Remove the exclsive time test. This ensures that it's not +		/* Remove the exclusive time test. This ensures that it's not  		   in control as well */  		l = strlen (RC_SVCDIR "exclusive") +  			strlen (svcname) + @@ -420,7 +421,7 @@ static char read_key (bool block)  	struct termios termios;  	char c = 0;  	int fd = fileno (stdin); -	 +  	if (! isatty (fd))  		return (false); @@ -736,6 +737,8 @@ int main (int argc, char **argv)  	char ksoftbuffer [PATH_MAX];  	char pidstr[6];  	int opt; +	DIR *dp; +	struct dirent *d;  	atexit (cleanup);  	if (argv[0]) @@ -1032,18 +1035,14 @@ int main (int argc, char **argv)  	   its coldplugging thing. runscript knows when we're not ready so it  	   stores a list of coldplugged services in DEVBOOT for us to pick up  	   here when we are ready for them */ -	start_services = rc_ls_dir (DEVBOOT, RC_LS_INITD); -	if (start_services) { +	if ((dp = opendir (DEVBOOT))) { +		while ((d = readdir (dp))) { +			if (rc_service_exists (d->d_name) && +				rc_service_plugable (d->d_name)) +				rc_service_mark (d->d_name, RC_SERVICE_COLDPLUGGED); +		} +		closedir (dp);  		rc_rm_dir (DEVBOOT, true); - -		STRLIST_FOREACH (start_services, service, i) -			if (rc_service_plugable (service)) -				rc_service_mark (service, RC_SERVICE_COLDPLUGGED); -		/* We need to dump this list now. -		   This may seem redunant, but only Linux needs this and saves on -		   code bloat. */ -		rc_strlist_free (start_services); -		start_services = NULL;  	}  #else  	/* BSD's on the other hand populate /dev automagically and use devd. @@ -1057,50 +1056,52 @@ int main (int argc, char **argv)  	{  #if defined(__DragonFly__) || defined(__FreeBSD__)  		/* The net interfaces are easy - they're all in net /dev/net :) */ -		start_services = rc_ls_dir ("/dev/net", 0); -		STRLIST_FOREACH (start_services, service, i) { -			j = (strlen ("net.") + strlen (service) + 1); -			tmp = rc_xmalloc (sizeof (char *) * j); -			snprintf (tmp, j, "net.%s", service); -			if (rc_service_exists (tmp) && rc_service_plugable (tmp)) -				rc_service_mark (tmp, RC_SERVICE_COLDPLUGGED); -			CHAR_FREE (tmp); +		if ((dp = opendir ("/dev/net"))) { +			while ((d = readdir (dp))) { +				i = (strlen ("net.") + strlen (d->d_name) + 1); +				tmp = rc_xmalloc (sizeof (char *) * i); +				snprintf (tmp, i, "net.%s", d->d_name); +				if (rc_service_exists (d->d_name) && +					rc_service_plugable (d->d_name)) +					rc_service_mark (d->d_name, RC_SERVICE_COLDPLUGGED); +				CHAR_FREE (tmp); +			} +			closedir (dp);  		} -		rc_strlist_free (start_services);  #endif  		/* The mice are a little more tricky.  		   If we coldplug anything else, we'll probably do it here. */ -		start_services = rc_ls_dir ("/dev", 0); -		STRLIST_FOREACH (start_services, service, i) { -			if (strncmp (service, "psm", 3) == 0 || -				strncmp (service, "ums", 3) == 0) -			{ -				char *p = service + 3; -				if (p && isdigit (*p)) { -					j = (strlen ("moused.") + strlen (service) + 1); -					tmp = rc_xmalloc (sizeof (char *) * j); -					snprintf (tmp, j, "moused.%s", service); -					if (rc_service_exists (tmp) && rc_service_plugable (tmp)) -						rc_service_mark (tmp, RC_SERVICE_COLDPLUGGED); -					CHAR_FREE (tmp); +		if ((dp == opendir ("/dev"))) { +			while ((d = readdir (dp))) { +				if (strncmp (d->d_name, "psm", 3) == 0 || +					strncmp (d->d_name, "ums", 3) == 0) +				{ +					char *p = d->d_name + 3; +					if (p && isdigit (*p)) { +						i = (strlen ("moused.") + strlen (d->d_name) + 1); +						tmp = rc_xmalloc (sizeof (char *) * i); +						snprintf (tmp, i, "moused.%s", d->d_name); +						if (rc_service_exists (tmp) && rc_service_plugable (tmp)) +							rc_service_mark (tmp, RC_SERVICE_COLDPLUGGED); +						CHAR_FREE (tmp); +					}  				}  			} +			closedir (dp);  		} -		rc_strlist_free (start_services); -		start_services = NULL;  	}  #endif  	/* Build a list of all services to stop and then work out the  	   correct order for stopping them */ -	stop_services = rc_ls_dir (RC_SVCDIR_STARTING, RC_LS_INITD); -	 -	tmplist = rc_ls_dir (RC_SVCDIR_INACTIVE, RC_LS_INITD); +	stop_services = rc_services_in_state (RC_SERVICE_STARTING); + +	tmplist = rc_services_in_state (RC_SERVICE_INACTIVE);  	rc_strlist_join (&stop_services, tmplist);  	rc_strlist_free (tmplist); -	tmplist = rc_ls_dir (RC_SVCDIR_STARTED, RC_LS_INITD); +	tmplist = rc_services_in_state (RC_SERVICE_STARTED);  	rc_strlist_join (&stop_services, tmplist);  	rc_strlist_free (tmplist); @@ -1110,7 +1111,7 @@ int main (int argc, char **argv)  	rc_strlist_add (&types, "iafter");  	deporder = rc_deptree_depends (deptree, types, stop_services, -							   runlevel, depoptions | RC_DEP_STOP); +								   runlevel, depoptions | RC_DEP_STOP);  	rc_strlist_free (stop_services);  	rc_strlist_free (types); @@ -1120,7 +1121,7 @@ int main (int argc, char **argv)  	rc_strlist_reverse (stop_services);  	/* Load our list of coldplugged services */ -	coldplugged_services = rc_ls_dir (RC_SVCDIR_COLDPLUGGED, RC_LS_INITD); +	coldplugged_services = rc_services_in_state (RC_SERVICE_COLDPLUGGED);  	/* Load our start services now.  	   We have different rules dependent on runlevel. */ @@ -1133,15 +1134,12 @@ int main (int argc, char **argv)  			}  			printf ("\n");  		} -		tmp = rc_strcatpaths (RC_RUNLEVELDIR, newlevel ? newlevel : runlevel, -							  (char *) NULL); -		tmplist = rc_ls_dir (tmp, RC_LS_INITD); +		tmplist = rc_services_in_runlevel (newlevel ? newlevel : runlevel);  		rc_strlist_join (&start_services, tmplist);  		rc_strlist_free (tmplist); -		CHAR_FREE (tmp);  	} else {  		/* Store our list of coldplugged services */ -		tmplist = rc_ls_dir (RC_SVCDIR_COLDPLUGGED, RC_LS_INITD); +		tmplist = rc_services_in_state (RC_SERVICE_COLDPLUGGED);  		rc_strlist_join (&coldplugged_services, tmplist);  		rc_strlist_free (tmplist);  		if (strcmp (newlevel ? newlevel : runlevel, RC_LEVEL_SINGLE) != 0 && @@ -1155,7 +1153,7 @@ int main (int argc, char **argv)  			tmplist = rc_services_in_runlevel (newlevel ? newlevel : runlevel);  			rc_strlist_join (&start_services, tmplist);  			rc_strlist_free (tmplist); -			 +  			STRLIST_FOREACH (coldplugged_services, service, i)  				rc_strlist_add (&start_services, service); @@ -1229,7 +1227,7 @@ int main (int argc, char **argv)  		   going to be started depends on us */  		rc_strlist_add (&stopdeps, service);  		deporder = rc_deptree_depends (deptree, types, stopdeps, -								   runlevel, RC_DEP_STRICT); +									   runlevel, RC_DEP_STRICT);  		rc_strlist_free (stopdeps);  		stopdeps = NULL;  		found = false; @@ -1299,7 +1297,7 @@ int main (int argc, char **argv)  	rc_strlist_add (&types, "iuse");  	rc_strlist_add (&types, "iafter");  	deporder = rc_deptree_depends (deptree, types, start_services, -							   runlevel, depoptions | RC_DEP_START); +								   runlevel, depoptions | RC_DEP_START);  	rc_strlist_free (types);  	types = NULL;  	rc_strlist_free (start_services); | 
