aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorGabor Juhos <juhosg@openwrt.org>2013-09-25 20:03:19 +0000
committerGabor Juhos <juhosg@openwrt.org>2013-09-25 20:03:19 +0000
commit2bcab84045703b948333ff26a4e37a60f8407df0 (patch)
tree983bc60aed74bd4cc99cdd7ed06a7c5614cf3f6a /tools
parent942e69b1663cf74a172df4f5e370d59d0798c081 (diff)
downloadupstream-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.c17
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) |