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
This commit is contained in:
Gabor Juhos 2013-09-25 20:03:19 +00:00
parent 942e69b166
commit 2bcab84045

View 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) |