mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-15 04:43:53 +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
(cherry picked from commit f66a8328c3
)
This commit is contained in:
parent
e427f47865
commit
3c94050525
|
@ -194,23 +194,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