X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fopenwrt.git;a=blobdiff_plain;f=tools%2Ffirmware-utils%2Fsrc%2Ftrx.c;h=dc5bb672aeba3ff0b108da9f1db7cbed8f2dac6b;hp=e3b6a3941fc7d0ca4c70778d210b867e859b9690;hb=050fb3b55cde4348f4ed12ab98f451c4c56a695b;hpb=b61b447472b6a0a05feeb53f3953c3e8c93105c8 diff --git a/tools/firmware-utils/src/trx.c b/tools/firmware-utils/src/trx.c index e3b6a3941f..dc5bb672ae 100644 --- a/tools/firmware-utils/src/trx.c +++ b/tools/firmware-utils/src/trx.c @@ -68,7 +68,7 @@ uint32_t crc32buf(char *buf, size_t len); #define TRX_MAGIC 0x30524448 /* "HDR0" */ #define TRX_MAX_LEN 0x720000 -#define TRX_NO_HEADER 1 /* Do not write TRX header */ +#define TRX_NO_HEADER 1 /* Do not write TRX header */ struct trx_header { uint32_t magic; /* "HDR0" */ @@ -100,7 +100,7 @@ int main(int argc, char **argv) int c, i, append = 0; size_t n; ssize_t n2; - uint32_t cur_len, fsmark=0; + uint32_t cur_len, fsmark=0, magic; unsigned long maxlen = TRX_MAX_LEN; struct trx_header *p; char trx_version = 1; @@ -121,7 +121,7 @@ int main(int argc, char **argv) in = NULL; i = 0; - while ((c = getopt(argc, argv, "-:2o:m:a:x:b:f:A:F:")) != -1) { + while ((c = getopt(argc, argv, "-:2o:m:a:x:b:f:A:F:M:")) != -1) { switch (c) { case '2': /* take care that nothing was written to buf so far */ @@ -242,6 +242,15 @@ int main(int argc, char **argv) cur_len += n2; } + break; + case 'M': + errno = 0; + magic = strtoul(optarg, &e, 0); + if (errno || (e == optarg) || *e) { + fprintf(stderr, "illegal numeric string\n"); + usage(); + } + p->magic = STORE32_LE(magic); break; default: usage(); @@ -262,7 +271,7 @@ int main(int argc, char **argv) cur_len += ROUND - n; } - /* for TRXv2 set bin-header Flags to 0xFF for CRC calculation like CFE does */ + /* for TRXv2 set bin-header Flags to 0xFF for CRC calculation like CFE does */ if (trx_version == 2) { if(cur_len - LOAD32_LE(p->offsets[3]) < sizeof(binheader)) { fprintf(stderr, "TRXv2 binheader too small!\n"); @@ -289,7 +298,7 @@ int main(int argc, char **argv) } fclose(out); - + return EXIT_SUCCESS; }