diff options
Diffstat (limited to 'usr/gen_init_cpio.c')
| -rw-r--r-- | usr/gen_init_cpio.c | 27 | 
1 files changed, 9 insertions, 18 deletions
diff --git a/usr/gen_init_cpio.c b/usr/gen_init_cpio.c index af8c925e93e..225ad244cf8 100644 --- a/usr/gen_init_cpio.c +++ b/usr/gen_init_cpio.c @@ -382,24 +382,15 @@ error:  static char *cpio_replace_env(char *new_location)  {  	char expanded[PATH_MAX + 1]; -	char env_var[PATH_MAX + 1]; -	char *start; -	char *end; - -	for (start = NULL; (start = strstr(new_location, "${")); ) { -		end = strchr(start, '}'); -		if (start < end) { -			*env_var = *expanded = '\0'; -			strncat(env_var, start + 2, end - start - 2); -			strncat(expanded, new_location, start - new_location); -			strncat(expanded, getenv(env_var), -				PATH_MAX - strlen(expanded)); -			strncat(expanded, end + 1, -				PATH_MAX - strlen(expanded)); -			strncpy(new_location, expanded, PATH_MAX); -			new_location[PATH_MAX] = 0; -		} else -			break; +	char *start, *end, *var; + +	while ((start = strstr(new_location, "${")) && +	       (end = strchr(start + 2, '}'))) { +		*start = *end = 0; +		var = getenv(start + 2); +		snprintf(expanded, sizeof expanded, "%s%s%s", +			 new_location, var ? var : "", end + 1); +		strcpy(new_location, expanded);  	}  	return new_location;  | 
