diff options
author | Gabor Juhos <juhosg@openwrt.org> | 2013-09-25 20:03:19 +0000 |
---|---|---|
committer | Gabor Juhos <juhosg@openwrt.org> | 2013-09-25 20:03:19 +0000 |
commit | 2bcab84045703b948333ff26a4e37a60f8407df0 (patch) | |
tree | 983bc60aed74bd4cc99cdd7ed06a7c5614cf3f6a /tools | |
parent | 942e69b1663cf74a172df4f5e370d59d0798c081 (diff) | |
download | upstream-2bcab84045703b948333ff26a4e37a60f8407df0.tar.gz upstream-2bcab84045703b948333ff26a4e37a60f8407df0.tar.bz2 upstream-2bcab84045703b948333ff26a4e37a60f8407df0.zip |
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
Diffstat (limited to 'tools')
-rw-r--r-- | tools/padjffs2/src/padjffs2.c | 17 |
1 files 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) | |