|
@@ -667,28 +667,16 @@ static int fdtgrep_find_regions(const void *fdt,
|
|
|
|
|
|
new_count = fdt_add_alias_regions(fdt, region, count,
|
|
|
max_regions, &state);
|
|
|
- if (new_count > max_regions) {
|
|
|
- region = malloc(new_count * sizeof(struct fdt_region));
|
|
|
- if (!region) {
|
|
|
- fprintf(stderr,
|
|
|
- "Out of memory for %d regions\n",
|
|
|
- count);
|
|
|
- return -1;
|
|
|
- }
|
|
|
- memcpy(region, state.region,
|
|
|
- count * sizeof(struct fdt_region));
|
|
|
- free(state.region);
|
|
|
- new_count = fdt_add_alias_regions(fdt, region, count,
|
|
|
- max_regions, &state);
|
|
|
+ if (new_count <= max_regions) {
|
|
|
+ /*
|
|
|
+ * The alias regions will now be at the end of the list.
|
|
|
+ * Sort the regions by offset to get things into the
|
|
|
+ * right order
|
|
|
+ */
|
|
|
+ count = new_count;
|
|
|
+ qsort(region, count, sizeof(struct fdt_region),
|
|
|
+ h_cmp_region);
|
|
|
}
|
|
|
-
|
|
|
- /*
|
|
|
- * The alias regions will now be at the end of the list. Sort
|
|
|
- * the regions by offset to get things into the right order
|
|
|
- */
|
|
|
- qsort(region, new_count, sizeof(struct fdt_region),
|
|
|
- h_cmp_region);
|
|
|
- count = new_count;
|
|
|
}
|
|
|
|
|
|
if (ret != -FDT_ERR_NOTFOUND)
|
|
@@ -805,7 +793,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,
|
|
|
* 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));
|
|
|
if (!region) {
|
|
|
fprintf(stderr, "Out of memory for %d regions\n",
|