summaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
authorPatrick Georgi <pgeorgi@chromium.org>2015-09-11 13:48:24 +0200
committerPatrick Georgi <pgeorgi@google.com>2015-09-21 13:01:22 +0000
commita9992d3da5d28dc9f8423fe17497231f894fa9d9 (patch)
treee3e853d374bc98a9fb6de7a0fd1f1108a03a722c /util
parent239c74231b7758a2eea99ccb327c4f8f1482503b (diff)
downloadcoreboot-a9992d3da5d28dc9f8423fe17497231f894fa9d9.tar.gz
coreboot-a9992d3da5d28dc9f8423fe17497231f894fa9d9.tar.bz2
coreboot-a9992d3da5d28dc9f8423fe17497231f894fa9d9.zip
ifdfake: allow "base+size" description of regions
This is more in line with how fmd/fmap specify ranges. Change-Id: Iecf8250e84d6eb267711ded446909b21147f1a9c Signed-off-by: Patrick Georgi <pgeorgi@chromium.org> Reviewed-on: http://review.coreboot.org/11623 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'util')
-rw-r--r--util/ifdfake/ifdfake.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/util/ifdfake/ifdfake.c b/util/ifdfake/ifdfake.c
index b70b6aeedfda..7b268df7387c 100644
--- a/util/ifdfake/ifdfake.c
+++ b/util/ifdfake/ifdfake.c
@@ -91,24 +91,39 @@ static void write_image(const region_t regions[], const char *const image)
static int parse_region(const char *_arg, region_t *const region)
{
char *const start = strdup(_arg);
+ int size_spec = 0;
+ unsigned long first, second;
if (!start) {
fprintf(stderr, "Out of memory.\n");
exit(EXIT_FAILURE);
}
- char *const colon = strchr(start, ':');
+ char *colon = strchr(start, ':');
if (!colon) {
- free(start);
- return -1;
+ colon = strchr(start, '+');
+ if (!colon) {
+ free(start);
+ return -1;
+ }
+ size_spec = 1;
}
*colon = '\0';
char *const end = colon + 1;
errno = 0;
- region->base = strtoul(start, NULL, 0);
- region->limit = strtoul(end, NULL, 0);
- region->size = region->limit - region->base + 1;
+ first = strtoul(start, NULL, 0);
+ second = strtoul(end, NULL, 0);
+
+ if (size_spec) {
+ region->base = first;
+ region->size = second;
+ region->limit = region->base + region->size - 1;
+ } else {
+ region->base = first;
+ region->limit = second;
+ region->size = region->limit - region->base + 1;
+ }
free(start);
if (errno) {