layout: Make `romentry.name` a pointer
This should provide more flexibility while we don't have to allocate
256B extra per layout entry.
Change-Id: Ibb903113550ec13f43cbbd0a412c8f35fe1cf454
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/33515
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
diff --git a/layout.c b/layout.c
index 6963e61..52aa388 100644
--- a/layout.c
+++ b/layout.c
@@ -15,6 +15,7 @@
* GNU General Public License for more details.
*/
+#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -44,8 +45,8 @@
{
struct flashrom_layout *const layout = get_global_layout();
FILE *romlayout;
- char tempstr[256];
- int i;
+ char tempstr[256], tempname[256];
+ int i, ret = 1;
romlayout = fopen(name, "r");
@@ -61,10 +62,9 @@
if (layout->num_entries >= MAX_ROMLAYOUT) {
msg_gerr("Maximum number of ROM images (%i) in layout "
"file reached.\n", MAX_ROMLAYOUT);
- (void)fclose(romlayout);
- return 1;
+ goto _close_ret;
}
- if (2 != fscanf(romlayout, "%255s %255s\n", tempstr, layout->entries[layout->num_entries].name))
+ if (2 != fscanf(romlayout, "%255s %255s\n", tempstr, tempname))
continue;
#if 0
// fscanf does not like arbitrary comments like that :( later
@@ -76,12 +76,16 @@
tstr2 = strtok(NULL, ":");
if (!tstr1 || !tstr2) {
msg_gerr("Error parsing layout file. Offending string: \"%s\"\n", tempstr);
- (void)fclose(romlayout);
- return 1;
+ goto _close_ret;
}
layout->entries[layout->num_entries].start = strtol(tstr1, (char **)NULL, 16);
layout->entries[layout->num_entries].end = strtol(tstr2, (char **)NULL, 16);
layout->entries[layout->num_entries].included = 0;
+ layout->entries[layout->num_entries].name = strdup(tempname);
+ if (!layout->entries[layout->num_entries].name) {
+ msg_gerr("Error adding layout entry: %s\n", strerror(errno));
+ goto _close_ret;
+ }
layout->num_entries++;
}
@@ -91,9 +95,11 @@
layout->entries[i].end, layout->entries[i].name);
}
- (void)fclose(romlayout);
+ ret = 0;
- return 0;
+_close_ret:
+ (void)fclose(romlayout);
+ return ret;
}
#endif
@@ -197,6 +203,7 @@
}
for (i = 0; i < layout->num_entries; i++) {
+ free(layout->entries[i].name);
layout->entries[i].included = 0;
}
layout->num_entries = 0;
@@ -278,9 +285,13 @@
*/
void flashrom_layout_release(struct flashrom_layout *const layout)
{
- if (layout == get_global_layout())
+ unsigned int i;
+
+ if (!layout || layout == get_global_layout())
return;
+ for (i = 0; i < layout->num_entries; ++i)
+ free(layout->entries[i].name);
free(layout);
}