Match the recent api change to rc_strlist_join also. We now free the 2nd list for ease of use.
This commit is contained in:
		
							
								
								
									
										17
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								ChangeLog
									
									
									
									
									
								
							| @@ -3,16 +3,17 @@ | ||||
|  | ||||
|   18 Sep 2007; Roy Marples <uberlord@gentoo.org>: | ||||
|  | ||||
|     API change! rc_config_env is renamed to rc_make_env and takes no argument. | ||||
|     API changes! | ||||
|  | ||||
|     API change! rc_ls_dir, rc_get_config and rc_get_list no longer take | ||||
|     a starting list as a first argument. Instead, use rc_strlist_join | ||||
|     to append or prepend the new list to an existing list. | ||||
|     rc_ls_dir, rc_get_config and rc_get_list no longer take a starting list | ||||
| 	as a first argument. Instead, use rc_strlist_join to append or prepend | ||||
| 	the new list to an existing list. | ||||
|  | ||||
|     API change! rc_strlist_add and friends now take char *** instead of | ||||
|     char ** and return a pointer to the item added instead of the new | ||||
|     list head. This is so we can easily tell if the item was successfully | ||||
|     added or not instead of iterating through the list looking for it. | ||||
|     rc_strlist_add and friends now take char *** instead of char ** and | ||||
| 	return a pointer to the item added instead of the new list head. This is | ||||
| 	so we can easily tell if the item was successfully added or not instead | ||||
| 	of iterating through the list looking for it. rc_strlist_join now frees | ||||
| 	list2 for ease of use. | ||||
| 	 | ||||
|     list = rc_strlist_add (list, item); | ||||
|     becomes | ||||
|   | ||||
| @@ -493,25 +493,22 @@ char **rc_order_services (rc_depinfo_t *deptree, const char *runlevel, | ||||
| 		strcmp (runlevel, RC_LEVEL_REBOOT) == 0) | ||||
| 	{ | ||||
| 		list = rc_ls_dir (RC_SVCDIR_STARTING, RC_LS_INITD); | ||||
| 		list = rc_strlist_join (list, | ||||
| 								rc_ls_dir (RC_SVCDIR_INACTIVE, RC_LS_INITD)); | ||||
| 		list = rc_strlist_join (list, | ||||
| 								rc_ls_dir (RC_SVCDIR_STARTED, RC_LS_INITD)); | ||||
| 		rc_strlist_join (&list, | ||||
| 						 rc_ls_dir (RC_SVCDIR_INACTIVE, RC_LS_INITD)); | ||||
| 		rc_strlist_join (&list, | ||||
| 						 rc_ls_dir (RC_SVCDIR_STARTED, RC_LS_INITD)); | ||||
| 		reverse = true; | ||||
| 	} else { | ||||
| 		list = rc_services_in_runlevel (runlevel); | ||||
|  | ||||
| 		/* Add coldplugged services */ | ||||
| 		list = rc_strlist_join (list, | ||||
| 								rc_ls_dir (RC_SVCDIR_COLDPLUGGED, RC_LS_INITD)); | ||||
|  | ||||
| 		rc_strlist_join (&list, rc_ls_dir (RC_SVCDIR_COLDPLUGGED, RC_LS_INITD)); | ||||
|  | ||||
| 		/* If we're not the boot runlevel then add that too */ | ||||
| 		if (strcmp (runlevel, bootlevel) != 0) { | ||||
| 			char *path = rc_strcatpaths (RC_RUNLEVELDIR, bootlevel, | ||||
| 										 (char *) NULL); | ||||
| 			list = rc_strlist_join (list, | ||||
| 									rc_ls_dir (path, RC_LS_INITD)); | ||||
| 			rc_strlist_join (&list, rc_ls_dir (path, RC_LS_INITD)); | ||||
| 			free (path); | ||||
| 		} | ||||
| 	}  | ||||
|   | ||||
| @@ -462,7 +462,7 @@ char **rc_filter_env (void) | ||||
| 	if (! whitelist) | ||||
| 		ewarn ("system environment whitelist (" SYS_WHITELIST ") missing"); | ||||
|  | ||||
| 	whitelist = rc_strlist_join (whitelist, rc_get_list (USR_WHITELIST)); | ||||
| 	rc_strlist_join (&whitelist, rc_get_list (USR_WHITELIST)); | ||||
|  | ||||
| 	if (! whitelist) | ||||
| 		return (NULL); | ||||
|   | ||||
| @@ -135,26 +135,29 @@ int rc_strlist_delete (char ***list, const char *item) | ||||
| } | ||||
| librc_hidden_def(rc_strlist_delete) | ||||
|  | ||||
| char **rc_strlist_join (char **list1, char **list2) | ||||
| int rc_strlist_join (char ***list1, char **list2) | ||||
| { | ||||
| 	char **lst1 = *list1; | ||||
| 	char **newlist; | ||||
| 	int i = 0; | ||||
| 	int j = 0; | ||||
|  | ||||
| 	if (! list1 && list2) | ||||
| 		return (list2); | ||||
| 	if (! list2 && list1) | ||||
| 		return (list1); | ||||
| 	if (! list1 && ! list2) | ||||
| 		return (NULL); | ||||
| 	if (! lst1 && list2) { | ||||
| 		*list1 = list2; | ||||
| 		return (0); | ||||
| 	} | ||||
| 	if (! list2 && lst1) | ||||
| 		return (0); | ||||
| 	if (! lst1 && ! list2) | ||||
| 		return (0); | ||||
|  | ||||
| 	while (list1[i]) | ||||
| 	while (lst1[i]) | ||||
| 		i++; | ||||
|  | ||||
| 	while (list2[j]) | ||||
| 		j++; | ||||
|  | ||||
| 	newlist = rc_xrealloc (list1, sizeof (char *) * (i + j + 1)); | ||||
| 	newlist = rc_xrealloc (lst1, sizeof (char *) * (i + j + 1)); | ||||
|  | ||||
| 	j = 0; | ||||
| 	while (list2[j]) { | ||||
| @@ -164,7 +167,11 @@ char **rc_strlist_join (char **list1, char **list2) | ||||
| 	} | ||||
| 	newlist[i] = NULL; | ||||
|  | ||||
| 	return (newlist); | ||||
| 	/* We free list2 here for ease of use. */ | ||||
| 	free (list2); | ||||
| 	 | ||||
| 	*list1 = newlist; | ||||
| 	return (0); | ||||
| } | ||||
| librc_hidden_def(rc_strlist_join) | ||||
|  | ||||
|   | ||||
							
								
								
									
										29
									
								
								src/rc.c
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								src/rc.c
									
									
									
									
									
								
							| @@ -815,7 +815,7 @@ int main (int argc, char **argv) | ||||
| 	/* Ensure our environment is pure | ||||
| 	   Also, add our configuration to it */ | ||||
| 	env = rc_filter_env (); | ||||
| 	env = rc_strlist_join (env, rc_make_env ()); | ||||
| 	rc_strlist_join (&env, rc_make_env ()); | ||||
|  | ||||
| 	if (env) { | ||||
| 		char *p; | ||||
| @@ -1089,10 +1089,10 @@ int main (int argc, char **argv) | ||||
| 	/* 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); | ||||
| 	stop_services = rc_strlist_join (stop_services, | ||||
| 									 rc_ls_dir (RC_SVCDIR_INACTIVE, RC_LS_INITD)); | ||||
| 	stop_services = rc_strlist_join (stop_services, | ||||
| 									 rc_ls_dir (RC_SVCDIR_STARTED, RC_LS_INITD)); | ||||
| 	rc_strlist_join (&stop_services, | ||||
| 					 rc_ls_dir (RC_SVCDIR_INACTIVE, RC_LS_INITD)); | ||||
| 	rc_strlist_join (&stop_services, | ||||
| 					 rc_ls_dir (RC_SVCDIR_STARTED, RC_LS_INITD)); | ||||
|  | ||||
| 	types = NULL; | ||||
| 	rc_strlist_add (&types, "ineed"); | ||||
| @@ -1123,25 +1123,22 @@ int main (int argc, char **argv) | ||||
| 		} | ||||
| 		tmp = rc_strcatpaths (RC_RUNLEVELDIR, newlevel ? newlevel : runlevel, | ||||
| 							  (char *) NULL); | ||||
| 		start_services = rc_strlist_join (start_services, | ||||
| 										  rc_ls_dir (tmp, RC_LS_INITD)); | ||||
| 		rc_strlist_join (&start_services, rc_ls_dir (tmp, RC_LS_INITD)); | ||||
| 		CHAR_FREE (tmp); | ||||
| 	} else { | ||||
| 		/* Store our list of coldplugged services */ | ||||
| 		coldplugged_services = rc_strlist_join (coldplugged_services, | ||||
| 												rc_ls_dir (RC_SVCDIR_COLDPLUGGED, RC_LS_INITD)); | ||||
| 		rc_strlist_join (&coldplugged_services, | ||||
| 						 rc_ls_dir (RC_SVCDIR_COLDPLUGGED, RC_LS_INITD)); | ||||
| 		if (strcmp (newlevel ? newlevel : runlevel, RC_LEVEL_SINGLE) != 0 && | ||||
| 			strcmp (newlevel ? newlevel : runlevel, RC_LEVEL_SHUTDOWN) != 0 && | ||||
| 			strcmp (newlevel ? newlevel : runlevel, RC_LEVEL_REBOOT) != 0) | ||||
| 		{ | ||||
| 			/* We need to include the boot runlevel services if we're not in it */ | ||||
| 			char **services = rc_services_in_runlevel (bootlevel); | ||||
|  | ||||
| 			start_services = rc_strlist_join (start_services, services); | ||||
| 			services = rc_services_in_runlevel (newlevel ? newlevel : runlevel); | ||||
| 			start_services = rc_strlist_join (start_services, services); | ||||
| 			services = NULL; | ||||
|  | ||||
| 			rc_strlist_join (&start_services, | ||||
| 							 rc_services_in_runlevel (bootlevel)); | ||||
| 			rc_strlist_join (&start_services, | ||||
| 							 rc_services_in_runlevel (newlevel ? | ||||
| 													  newlevel : runlevel)); | ||||
| 			STRLIST_FOREACH (coldplugged_services, service, i) | ||||
| 				rc_strlist_add (&start_services, service); | ||||
|  | ||||
|   | ||||
							
								
								
									
										2
									
								
								src/rc.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								src/rc.h
									
									
									
									
									
								
							| @@ -203,7 +203,7 @@ char *rc_strlist_addsort (char ***list, const char *item); | ||||
| char *rc_strlist_addsortc (char ***list, const char *item); | ||||
| char *rc_strlist_addsortu (char ***list, const char *item); | ||||
| int rc_strlist_delete (char ***list, const char *item); | ||||
| char **rc_strlist_join (char **list1, char **list2); | ||||
| int rc_strlist_join (char ***list1, char **list2); | ||||
| void rc_strlist_reverse (char **list); | ||||
| void rc_strlist_free (char **list); | ||||
|  | ||||
|   | ||||
| @@ -1049,7 +1049,7 @@ int runscript (int argc, char **argv) | ||||
| 		/* Ensure our environment is pure | ||||
| 		   Also, add our configuration to it */ | ||||
| 		env = rc_filter_env (); | ||||
| 		env = rc_strlist_join (env, rc_make_env ()); | ||||
| 		rc_strlist_join (&env, rc_make_env ()); | ||||
|  | ||||
| 		if (env) { | ||||
| 			char *p; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user