mirror of
https://github.com/freebsd/freebsd-src
synced 2024-07-22 02:37:15 +00:00
bsdinstall: Replace correct, but fragile, string builder with open_memstream.
The old one triggered a false positive -Warray-bounds from GCC (the compiler assumed len was always 0), but it was also fragile with manually computed lengths paired with strcat vs using a string builder. Differential Revision: https://reviews.freebsd.org/D40658
This commit is contained in:
parent
f5e7330633
commit
f66a8328c3
|
@ -195,23 +195,26 @@ int parse_disk_config(char *input)
|
|||
int
|
||||
scripted_editor(int argc, const char **argv)
|
||||
{
|
||||
char *token;
|
||||
int i, error = 0, len = 0;
|
||||
FILE *fp;
|
||||
char *input, *token;
|
||||
size_t len;
|
||||
int i, error = 0;
|
||||
|
||||
for (i = 1; i < argc; i++)
|
||||
len += strlen(argv[i]) + 1;
|
||||
char inputbuf[len], *input = inputbuf;
|
||||
strcpy(input, argv[1]);
|
||||
fp = open_memstream(&input, &len);
|
||||
fputs(argv[1], fp);
|
||||
for (i = 2; i < argc; i++) {
|
||||
strcat(input, " ");
|
||||
strcat(input, argv[i]);
|
||||
fprintf(fp, " %s", argv[i]);
|
||||
}
|
||||
fclose(fp);
|
||||
|
||||
while ((token = strsep(&input, ";")) != NULL) {
|
||||
error = parse_disk_config(token);
|
||||
if (error != 0)
|
||||
if (error != 0) {
|
||||
free(input);
|
||||
return (error);
|
||||
}
|
||||
}
|
||||
free(input);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue