Signed-off-by: Cody P Schafer <de...@codyps.com> --- package/system/mtd/src/trx.c | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-)
diff --git a/package/system/mtd/src/trx.c b/package/system/mtd/src/trx.c index 65c2440..431fd06 100644 --- a/package/system/mtd/src/trx.c +++ b/package/system/mtd/src/trx.c @@ -22,6 +22,7 @@ #include <stdio.h> #include <stdlib.h> #include <stddef.h> +#include <stdbool.h> #include <unistd.h> #include <fcntl.h> #include <sys/mman.h> @@ -35,6 +36,12 @@ #include "crc32.h" #define TRX_MAGIC 0x30524448 /* "HDR0" */ +#define BELKIN_F7D3301_MAGIC 0x20100322 +#define BELKIN_F7D3302_MAGIC 0x20090928 +#define BELKIN_F7D4302_MAGIC 0x20101006 +#define BELKIN_F7D4401_MAGIC 0x00018517 +#define BELKIN_F7DXXXX_QA_MAGIC 0x12345678 + struct trx_header { uint32_t magic; /* "HDR0" */ uint32_t len; /* Length of file including header */ @@ -54,6 +61,22 @@ struct trx_header { ssize_t pread(int fd, void *buf, size_t count, off_t offset); ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset); +static bool is_trx_magic(uint32_t magic) +{ + magic = STORE32_LE(magic); + switch (magic) { + case TRX_MAGIC: + case BELKIN_F7D3301_MAGIC: + case BELKIN_F7D3302_MAGIC: + case BELKIN_F7D4302_MAGIC: + case BELKIN_F7D4401_MAGIC: + case BELKIN_F7DXXXX_QA_MAGIC: + return true; + default: + return false; + } +} + int trx_fixup(int fd, const char *name) { @@ -82,7 +105,7 @@ trx_fixup(int fd, const char *name) } trx = ptr; - if (trx->magic != TRX_MAGIC) { + if (!is_trx_magic(trx->magic)) { fprintf(stderr, "TRX header not found\n"); goto err; } @@ -116,7 +139,7 @@ trx_check(int imagefd, const char *mtd, char *buf, int *len) return 0; } - if (trx->magic != TRX_MAGIC || trx->len < sizeof(struct trx_header)) { + if (!is_trx_magic(trx->magic) || trx->len < sizeof(struct trx_header)) { if (quiet < 2) { fprintf(stderr, "Bad trx header\n"); fprintf(stderr, "This is not the correct file format; refusing to flash.\n" @@ -181,7 +204,7 @@ mtd_fixtrx(const char *mtd, size_t offset) } trx = (struct trx_header *) (buf + offset); - if (trx->magic != STORE32_LE(0x30524448)) { + if (!is_trx_magic(trx->magic)) { fprintf(stderr, "No trx magic found\n"); exit(1); } -- 1.8.4.2 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel