diff --git a/flattree.c b/flattree.c index 913b02f..b54f7ef 100644 --- a/flattree.c +++ b/flattree.c @@ -353,6 +353,7 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version, struct data dtbuf = empty_data; struct data strbuf = empty_data; struct boot_param_header bph; + int padlen; for (i = 0; i < ARRAY_SIZE(version_table); i++) { if (version_table[i].version == version) @@ -370,6 +371,19 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version, make_bph(&bph, vi, reservebuf.len, dtbuf.len, strbuf.len, boot_cpuid_phys); + /* + * If the user asked for more space than is used, adjust the totalsize. + */ + padlen = minsize - be32_to_cpu(bph.totalsize); + if (padlen > 0) { + bph.totalsize = cpu_to_be32(minsize); + } else { + if ((minsize > 0) && (quiet < 1)) + fprintf(stderr, + "Warning: blob size %d >= minimum size %d\n", + be32_to_cpu(bph.totalsize), minsize); + } + /* * Assemble the blob: start with the header, add with alignment * the reserve buffer, add the reserve map terminating zeroes, @@ -385,18 +399,9 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version, /* * If the user asked for more space than is used, pad out the blob. */ - if (minsize > 0) { - int padlen = minsize - be32_to_cpu(bph.totalsize); - - if (padlen > 0) { - blob = data_append_zeroes(blob, padlen); - bph.totalsize = cpu_to_be32(minsize); - } else { - if (quiet < 1) - fprintf(stderr, - "Warning: blob size %d >= minimum size %d\n", - be32_to_cpu(bph.totalsize), minsize); - } + if (padlen > 0) { + blob = data_append_zeroes(blob, padlen); + bph.totalsize = cpu_to_be32(minsize); } fwrite(blob.val, blob.len, 1, f);