diff mbox

[U-Boot,v2,02/14] sparse: Move main header parsing to a function of its own

Message ID 1444912462-3949-3-git-send-email-maxime.ripard@free-electrons.com
State Accepted
Delegated to: Tom Rini
Headers show

Commit Message

Maxime Ripard Oct. 15, 2015, 12:34 p.m. UTC
The current sparse image format parser is quite tangled, with a lot of
code duplication.

Start refactoring it by moving the header parsing function to a function
of its own.

Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
---
 common/aboot.c | 45 ++++++++++++++++++++++++---------------------
 1 file changed, 24 insertions(+), 21 deletions(-)

Comments

Tom Rini Nov. 13, 2015, 1:26 a.m. UTC | #1
On Thu, Oct 15, 2015 at 02:34:10PM +0200, Maxime Ripard wrote:

> The current sparse image format parser is quite tangled, with a lot of
> code duplication.
> 
> Start refactoring it by moving the header parsing function to a function
> of its own.
> 
> Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
> Reviewed-by: Tom Rini <trini@konsulko.com>

Applied to u-boot/master, thanks!
diff mbox

Patch

diff --git a/common/aboot.c b/common/aboot.c
index fba8e3e683e7..cd1b6a6ac8e0 100644
--- a/common/aboot.c
+++ b/common/aboot.c
@@ -41,6 +41,26 @@ 
 #include <part.h>
 #include <sparse_format.h>
 
+static sparse_header_t *sparse_parse_header(void **data)
+{
+	/* Read and skip over sparse image header */
+	sparse_header_t *sparse_header = (sparse_header_t *) *data;
+
+	*data += sparse_header->file_hdr_sz;
+
+	debug("=== Sparse Image Header ===\n");
+	debug("magic: 0x%x\n", sparse_header->magic);
+	debug("major_version: 0x%x\n", sparse_header->major_version);
+	debug("minor_version: 0x%x\n", sparse_header->minor_version);
+	debug("file_hdr_sz: %d\n", sparse_header->file_hdr_sz);
+	debug("chunk_hdr_sz: %d\n", sparse_header->chunk_hdr_sz);
+	debug("blk_sz: %d\n", sparse_header->blk_sz);
+	debug("total_blks: %d\n", sparse_header->total_blks);
+	debug("total_chunks: %d\n", sparse_header->total_chunks);
+
+	return sparse_header;
+}
+
 void write_sparse_image(block_dev_desc_t *dev_desc,
 		disk_partition_t *info, const char *part_name,
 		void *data, unsigned sz)
@@ -58,29 +78,12 @@  void write_sparse_image(block_dev_desc_t *dev_desc,
 	uint32_t total_blocks = 0;
 	int i;
 
-	/* Read and skip over sparse image header */
-	sparse_header = (sparse_header_t *) data;
-
-	data += sparse_header->file_hdr_sz;
-	if (sparse_header->file_hdr_sz > sizeof(sparse_header_t))
-	{
-		/*
-		 * Skip the remaining bytes in a header that is longer than
-		 * we expected.
-		 */
-		data += (sparse_header->file_hdr_sz - sizeof(sparse_header_t));
+	sparse_header = sparse_parse_header(&data);
+	if (!sparse_header) {
+		fastboot_fail("sparse header issue\n");
+		return;
 	}
 
-	debug("=== Sparse Image Header ===\n");
-	debug("magic: 0x%x\n", sparse_header->magic);
-	debug("major_version: 0x%x\n", sparse_header->major_version);
-	debug("minor_version: 0x%x\n", sparse_header->minor_version);
-	debug("file_hdr_sz: %d\n", sparse_header->file_hdr_sz);
-	debug("chunk_hdr_sz: %d\n", sparse_header->chunk_hdr_sz);
-	debug("blk_sz: %d\n", sparse_header->blk_sz);
-	debug("total_blks: %d\n", sparse_header->total_blks);
-	debug("total_chunks: %d\n", sparse_header->total_chunks);
-
 	/* verify sparse_header->blk_sz is an exact multiple of info->blksz */
 	if (sparse_header->blk_sz !=
 	    (sparse_header->blk_sz & ~(info->blksz - 1))) {