From 2bcab84045703b948333ff26a4e37a60f8407df0 Mon Sep 17 00:00:00 2001
From: Gabor Juhos <juhosg@openwrt.org>
Date: Wed, 25 Sep 2013 20:03:19 +0000
Subject: [PATCH] tools/padjffs2: allow to specify extra offset

This will be useful for firmware images which are
using a custom header.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 38195
---
 tools/padjffs2/src/padjffs2.c | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/tools/padjffs2/src/padjffs2.c b/tools/padjffs2/src/padjffs2.c
index 58d99140d9..aa932efa6f 100644
--- a/tools/padjffs2/src/padjffs2.c
+++ b/tools/padjffs2/src/padjffs2.c
@@ -19,6 +19,7 @@
 #include <sys/stat.h>
 
 static char *progname;
+static unsigned int xtra_offset;
 static unsigned char eof_mark[4] = {0xde, 0xad, 0xc0, 0xde};
 
 #define ERR(fmt, ...) do { \
@@ -63,6 +64,8 @@ static int pad_image(char *name, uint32_t pad_mask)
 
 	memset(buf, '\xff', BUF_SIZE);
 
+	in_len += xtra_offset;
+
 	out_len = in_len;
 	while (pad_mask) {
 		uint32_t mask;
@@ -83,7 +86,7 @@ static int pad_image(char *name, uint32_t pad_mask)
 				pad_mask &= ~mask;
 		}
 
-		printf("padding image to %08x\n", (unsigned int) in_len);
+		printf("padding image to %08x\n", (unsigned int) in_len - xtra_offset);
 
 		while (out_len < in_len) {
 			ssize_t len;
@@ -131,14 +134,22 @@ int main(int argc, char* argv[])
 
 	if (argc < 2) {
 		fprintf(stderr,
-			"Usage: %s file [pad0] [pad1] [padN]\n",
+			"Usage: %s file [-x <xtra offset>] [pad0] [pad1] [padN]\n",
 			progname);
 		goto out;
 	}
 
 	pad_mask = 0;
-	for (i = 2; i < argc; i++)
+	for (i = 2; i < argc; i++) {
+		if (i == 2 && strcmp(argv[i], "-x") == 0) {
+			i++;
+			xtra_offset = strtoul(argv[i], NULL, 0);
+			fprintf(stderr, "assuming %u bytes offset\n",
+				xtra_offset);
+			continue;
+		}
 		pad_mask |= strtoul(argv[i], NULL, 0) * 1024;
+	}
 
 	if (pad_mask == 0)
 		pad_mask = (4 * 1024) | (8 * 1024) | (64 * 1024) |
-- 
GitLab