tools/padjffs2: allow to specify extra offset
authorGabor Juhos <juhosg@openwrt.org>
Wed, 25 Sep 2013 20:03:19 +0000 (20:03 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Wed, 25 Sep 2013 20:03:19 +0000 (20:03 +0000)
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

index 58d99140d926741a789310174514ad3db318e926..aa932efa6f1fe0de140dde89af4265530f0db1a8 100644 (file)
@@ -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) |