diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/display_options.c | 36 | ||||
-rw-r--r-- | lib/of_live.c | 7 |
2 files changed, 37 insertions, 6 deletions
diff --git a/lib/display_options.c b/lib/display_options.c index 29343fc00e3..4ea27ca99d3 100644 --- a/lib/display_options.c +++ b/lib/display_options.c @@ -13,13 +13,39 @@ #include <linux/ctype.h> #include <asm/io.h> -int display_options (void) +char *display_options_get_banner_priv(bool newlines, const char *build_tag, + char *buf, int size) { -#if defined(BUILD_TAG) - printf ("\n\n%s, Build: %s\n\n", version_string, BUILD_TAG); -#else - printf ("\n\n%s\n\n", version_string); + int len; + + len = snprintf(buf, size, "%s%s", newlines ? "\n\n" : "", + version_string); + if (build_tag && len < size) + len += snprintf(buf + len, size - len, ", Build: %s", + build_tag); + if (len > size - 3) + len = size - 3; + strcpy(buf + len, "\n\n"); + + return buf; +} + +#ifndef BUILD_TAG +#define BUILD_TAG NULL #endif + +char *display_options_get_banner(bool newlines, char *buf, int size) +{ + return display_options_get_banner_priv(newlines, BUILD_TAG, buf, size); +} + +int display_options(void) +{ + char buf[DISPLAY_OPTIONS_BANNER_LENGTH]; + + display_options_get_banner(true, buf, sizeof(buf)); + printf("%s", buf); + return 0; } diff --git a/lib/of_live.c b/lib/of_live.c index 51927f9e913..f3514833871 100644 --- a/lib/of_live.c +++ b/lib/of_live.c @@ -216,9 +216,12 @@ static void *unflatten_dt_node(const void *blob, void *mem, int *poffset, *poffset = fdt_next_node(blob, *poffset, &depth); if (depth < 0) depth = 0; - while (*poffset > 0 && depth > old_depth) + while (*poffset > 0 && depth > old_depth) { mem = unflatten_dt_node(blob, mem, poffset, np, NULL, fpsize, dryrun); + if (!mem) + return NULL; + } if (*poffset < 0 && *poffset != -FDT_ERR_NOTFOUND) { debug("unflatten: error %d processing FDT\n", *poffset); @@ -286,6 +289,8 @@ static int unflatten_device_tree(const void *blob, start = 0; size = (unsigned long)unflatten_dt_node(blob, NULL, &start, NULL, NULL, 0, true); + if (!size) + return -EFAULT; size = ALIGN(size, 4); debug(" size is %lx, allocating...\n", size); |