tools: otrx: allow own magic
authorHauke Mehrtens <hauke@hauke-m.de>
Wed, 30 Dec 2020 17:24:51 +0000 (18:24 +0100)
committerHauke Mehrtens <hauke@hauke-m.de>
Mon, 15 Mar 2021 15:57:34 +0000 (16:57 +0100)
This allows to specify an own magic instead of using the default magic
value TRX_MAGIC. If no own magic is specified the default one will be
used.

Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
tools/firmware-utils/src/otrx.c

index 223e032f2b5ed81c792b10373c46c21468fae0d4..3bbbac39e3b3481a7addef8acebb6101dce02180 100644 (file)
@@ -287,7 +287,6 @@ static int otrx_create_write_hdr(FILE *trx, struct trx_header *hdr) {
        uint8_t buf[1024];
        uint32_t crc32;
 
-       hdr->magic = cpu_to_le32(TRX_MAGIC);
        hdr->version = 1;
 
        fseek(trx, 0, SEEK_SET);
@@ -324,9 +323,13 @@ static int otrx_create(int argc, char **argv) {
        ssize_t sbytes;
        size_t curr_idx = 0;
        size_t curr_offset = sizeof(hdr);
+       char *e;
+       uint32_t magic;
        int c;
        int err = 0;
 
+       hdr.magic = cpu_to_le32(TRX_MAGIC);
+
        if (argc < 3) {
                fprintf(stderr, "No TRX file passed\n");
                err = -EINVAL;
@@ -343,7 +346,7 @@ static int otrx_create(int argc, char **argv) {
        fseek(trx, curr_offset, SEEK_SET);
 
        optind = 3;
-       while ((c = getopt(argc, argv, "f:A:a:b:")) != -1) {
+       while ((c = getopt(argc, argv, "f:A:a:b:M:")) != -1) {
                switch (c) {
                case 'f':
                        if (curr_idx >= TRX_MAX_PARTS) {
@@ -400,6 +403,14 @@ static int otrx_create(int argc, char **argv) {
                                        curr_offset += sbytes;
                        }
                        break;
+               case 'M':
+                       errno = 0;
+                       magic = strtoul(optarg, &e, 0);
+                       if (errno || (e == optarg) || *e)
+                               fprintf(stderr, "illegal magic string %s\n", optarg);
+                       else
+                               hdr.magic = cpu_to_le32(magic);
+                       break;
                }
                if (err)
                        break;