Commit 5bd28da8 authored by Oleg Dzhimiev's avatar Oleg Dzhimiev
Browse files

fdtgerp

parent 0cbec1fd
Loading
Loading
Loading
Loading
+8 −13
Original line number Original line Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0+
/*
/*
 * Copyright (c) 2013, Google Inc.
 * Copyright (c) 2013, Google Inc.
 * Written by Simon Glass <sjg@chromium.org>
 * Written by Simon Glass <sjg@chromium.org>
 *
 *
 * SPDX-License-Identifier:	GPL-2.0+
 *
 * Perform a grep of an FDT either displaying the source subset or producing
 * Perform a grep of an FDT either displaying the source subset or producing
 * a new .dtb subset which can be used as required.
 * a new .dtb subset which can be used as required.
 */
 */
@@ -133,11 +134,11 @@ static int value_add(struct display_info *disp, struct value_node **headp,
	}
	}


	str = strdup(str);
	str = strdup(str);
	if (!str)
		goto err_mem;
	node = malloc(sizeof(*node));
	node = malloc(sizeof(*node));
	if (!node)
	if (!str || !node) {
		goto err_mem;
		fprintf(stderr, "Out of memory\n");
		return -1;
	}
	node->next = *headp;
	node->next = *headp;
	node->type = type;
	node->type = type;
	node->include = include;
	node->include = include;
@@ -145,9 +146,6 @@ static int value_add(struct display_info *disp, struct value_node **headp,
	*headp = node;
	*headp = node;


	return 0;
	return 0;
err_mem:
	fprintf(stderr, "Out of memory\n");
	return -1;
}
}


static bool util_is_printable_string(const void *data, int len)
static bool util_is_printable_string(const void *data, int len)
@@ -776,7 +774,7 @@ char *utilfdt_read(const char *filename)
 */
 */
static int do_fdtgrep(struct display_info *disp, const char *filename)
static int do_fdtgrep(struct display_info *disp, const char *filename)
{
{
	struct fdt_region *region = NULL;
	struct fdt_region *region;
	int max_regions;
	int max_regions;
	int count = 100;
	int count = 100;
	char path[1024];
	char path[1024];
@@ -804,7 +802,7 @@ static int do_fdtgrep(struct display_info *disp, const char *filename)
	 * The first pass will count the regions, but if it is too many,
	 * The first pass will count the regions, but if it is too many,
	 * we do another pass to actually record them.
	 * we do another pass to actually record them.
	 */
	 */
	for (i = 0; i < 2; i++) {
	for (i = 0; i < 3; i++) {
		region = malloc(count * sizeof(struct fdt_region));
		region = malloc(count * sizeof(struct fdt_region));
		if (!region) {
		if (!region) {
			fprintf(stderr, "Out of memory for %d regions\n",
			fprintf(stderr, "Out of memory for %d regions\n",
@@ -818,14 +816,11 @@ static int do_fdtgrep(struct display_info *disp, const char *filename)
				disp->flags);
				disp->flags);
		if (count < 0) {
		if (count < 0) {
			report_error("fdt_find_regions", count);
			report_error("fdt_find_regions", count);
			free(region);
			return -1;
			return -1;
		}
		}
		if (count <= max_regions)
		if (count <= max_regions)
			break;
			break;
		free(region);
		free(region);
		fprintf(stderr, "Internal error with fdtgrep_find_region)(\n");
		return -1;
	}
	}


	/* Optionally print a list of regions */
	/* Optionally print a list of regions */