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:
		| @@ -19,6 +19,7 @@ | |||||||
| #include <sys/stat.h> | #include <sys/stat.h> | ||||||
|  |  | ||||||
| static char *progname; | static char *progname; | ||||||
|  | static unsigned int xtra_offset; | ||||||
| static unsigned char eof_mark[4] = {0xde, 0xad, 0xc0, 0xde}; | static unsigned char eof_mark[4] = {0xde, 0xad, 0xc0, 0xde}; | ||||||
|  |  | ||||||
| #define ERR(fmt, ...) do { \ | #define ERR(fmt, ...) do { \ | ||||||
| @@ -63,6 +64,8 @@ static int pad_image(char *name, uint32_t pad_mask) | |||||||
|  |  | ||||||
| 	memset(buf, '\xff', BUF_SIZE); | 	memset(buf, '\xff', BUF_SIZE); | ||||||
|  |  | ||||||
|  | 	in_len += xtra_offset; | ||||||
|  |  | ||||||
| 	out_len = in_len; | 	out_len = in_len; | ||||||
| 	while (pad_mask) { | 	while (pad_mask) { | ||||||
| 		uint32_t mask; | 		uint32_t mask; | ||||||
| @@ -83,7 +86,7 @@ static int pad_image(char *name, uint32_t pad_mask) | |||||||
| 				pad_mask &= ~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) { | 		while (out_len < in_len) { | ||||||
| 			ssize_t len; | 			ssize_t len; | ||||||
| @@ -131,14 +134,22 @@ int main(int argc, char* argv[]) | |||||||
|  |  | ||||||
| 	if (argc < 2) { | 	if (argc < 2) { | ||||||
| 		fprintf(stderr, | 		fprintf(stderr, | ||||||
| 			"Usage: %s file [pad0] [pad1] [padN]\n", | 			"Usage: %s file [-x <xtra offset>] [pad0] [pad1] [padN]\n", | ||||||
| 			progname); | 			progname); | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	pad_mask = 0; | 	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; | 		pad_mask |= strtoul(argv[i], NULL, 0) * 1024; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if (pad_mask == 0) | 	if (pad_mask == 0) | ||||||
| 		pad_mask = (4 * 1024) | (8 * 1024) | (64 * 1024) | | 		pad_mask = (4 * 1024) | (8 * 1024) | (64 * 1024) | | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Gabor Juhos
					Gabor Juhos