From 51d9015dda5e8748e25bc5309f808b1b06494b73 Mon Sep 17 00:00:00 2001 From: Anastasia Klimchuk Date: Fri, 9 Dec 2022 17:27:25 +1100 Subject: layout: Extract parsing include args into a separate function Change-Id: Iba2971846938fe95412f0a69ff3c069ee2d049b6 Signed-off-by: Anastasia Klimchuk Reviewed-on: https://review.coreboot.org/c/flashrom/+/70539 Reviewed-by: Edward O'Callaghan Reviewed-by: Angel Pons Tested-by: build bot (Jenkins) --- layout.c | 43 +++++++++++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 12 deletions(-) (limited to 'layout.c') diff --git a/layout.c b/layout.c index 9cd3e016a..350e49eca 100644 --- a/layout.c +++ b/layout.c @@ -114,42 +114,61 @@ _close_ret: } #endif -/* register an include argument (-i) for later processing */ -int register_include_arg(struct layout_include_args **args, const char *arg) +static bool parse_include_args(const char *arg, char **name, char **file) { - struct layout_include_args *tmp; char *colon; - char *name; - char *file = NULL; /* file is optional, so defaults to NULL */ + char *tmp_name; + char *tmp_file = NULL; /* file is optional, so defaults to NULL */ if (arg == NULL) { msg_gerr(" is a bad region name.\n"); - return 1; + return false; } /* -i [:] */ colon = strchr(arg, ':'); if (colon && !colon[1]) { msg_gerr("Missing filename parameter in %s\n", arg); - return 1; + return false; } if (colon) { - name = strndup(arg, colon - arg); - if (!name) { + tmp_name = strndup(arg, colon - arg); + if (!tmp_name) { msg_gerr("Out of memory"); goto error; } - file = strdup(colon + 1); - if (!file) { + tmp_file = strdup(colon + 1); + if (!tmp_file) { msg_gerr("Out of memory"); goto error; } } else { - name = strdup(arg); + tmp_name = strdup(arg); } + *name = tmp_name; + *file = tmp_file; + + return true; + +error: + free(tmp_name); + free(tmp_file); + return false; +} + +/* register an include argument (-i) for later processing */ +int register_include_arg(struct layout_include_args **args, const char *arg) +{ + struct layout_include_args *tmp; + char *name; + char *file; + + if (!parse_include_args(arg, &name, &file)) + return 1; + for (tmp = *args; tmp; tmp = tmp->next) { if (!strcmp(tmp->name, name)) { msg_gerr("Duplicate region name: \"%s\".\n", name); -- cgit v1.2.3