diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/librc/librc-depend.c | 23 | ||||
| -rw-r--r-- | src/rc/rc.c | 7 | ||||
| -rw-r--r-- | src/rc/runscript.c | 3 | 
3 files changed, 23 insertions, 10 deletions
diff --git a/src/librc/librc-depend.c b/src/librc/librc-depend.c index 97421fab..1fb6506c 100644 --- a/src/librc/librc-depend.c +++ b/src/librc/librc-depend.c @@ -738,7 +738,7 @@ rc_deptree_update(void)  	RC_STRING *s, *s2, *s2_np, *s3, *s4;  	char *line = NULL;  	size_t len = 0; -	char *depend, *depends, *service, *type, *nosys; +	char *depend, *depends, *service, *type, *nosys, *onosys;  	size_t i, k, l;  	bool retval = true;  	const char *sys = rc_sys(); @@ -841,17 +841,25 @@ rc_deptree_update(void)  	 * work for them. This doesn't stop them from being run directly. */  	if (sys) {  		len = strlen(sys); -		nosys = xmalloc(len + 3); -		nosys[0] = 'n'; -		nosys[1] = 'o'; +		nosys = xmalloc(len + 1); +		nosys[0] = '-';  		for (i = 0; i < len; i++) -			nosys[i + 2] = (char)tolower((unsigned char)sys[i]); -		nosys[i + 2] = '\0'; +			nosys[i + 1] = (char)tolower((unsigned char)sys[i]); +		nosys[i + 1] = '\0'; + +		onosys = xmalloc(len + 3); +		onosys[0] = 'n'; +		onosys[1] = 'o'; +		for (i = 0; i < len; i++) +			onosys[i + 2] = (char)tolower((unsigned char)sys[i]); +		onosys[i + 2] = '\0';  		TAILQ_FOREACH_SAFE(depinfo, deptree, entries, depinfo_np)  			if ((deptype = get_deptype(depinfo, "keyword")))  				TAILQ_FOREACH(s, deptype->services, entries) -					if (strcmp(s->value, nosys) == 0) { +					if (strcmp(s->value, nosys) == 0 || +					    strcmp(s->value, onosys) == 0) +					{  						provide = get_deptype(depinfo, "iprovide");  						TAILQ_REMOVE(deptree, depinfo, entries);  						TAILQ_FOREACH(di, deptree, entries) { @@ -870,6 +878,7 @@ rc_deptree_update(void)  						}  					}  		free(nosys); +		free(onosys);  	}  	/* Phase 3 - add our providers to the tree */ diff --git a/src/rc/rc.c b/src/rc/rc.c index 3d8628e8..6d04b3dd 100644 --- a/src/rc/rc.c +++ b/src/rc/rc.c @@ -600,8 +600,11 @@ do_stop_services(const char *newlevel, bool parallel, bool going_down)  			continue;  		}  		kwords = rc_deptree_depend(deptree, service->value, "keyword"); -		if (rc_stringlist_find(kwords, "nostop") || -		    (going_down && rc_stringlist_find(kwords, "noshutdown"))) +		if (rc_stringlist_find(kwords, "-stop") || +		    rc_stringlist_find(kwords, "nostop") || +		    (going_down && +			(rc_stringlist_find(kwords, "-shutdown") || +			    rc_stringlist_find(kwords, "noshutdown"))))  			nstop = true;  		else  			nstop = false; diff --git a/src/rc/runscript.c b/src/rc/runscript.c index 91a31a59..ca0d3252 100644 --- a/src/rc/runscript.c +++ b/src/rc/runscript.c @@ -471,7 +471,8 @@ svc_wait(const char *svc)  	/* Some services don't have a timeout, like fsck */  	keywords = rc_deptree_depend(deptree, svc, "keyword"); -	if (rc_stringlist_find(keywords, "notimeout")) +	if (rc_stringlist_find(keywords, "-timeout") || +	    rc_stringlist_find(keywords, "notimeout"))  		forever = true;  	rc_stringlist_free(keywords);  | 
