|
@@ -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;
|