From b5c41ad28c31d61d6eb9a0c0f3550e75ea74e09f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Sat, 6 Feb 2016 16:29:12 +0000 Subject: mtd: detect image format when writing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Recently TRX checking code was changed to detect Seama format and don't abort whole writing operation because of it. This isn't a good long-term solution. It's a poor idea to teach every format handler recognizing all possible formats. Instead it should be handled in a generic code which should run check depending on the detected format. This will also allow further improvements like fixing formats other than TRX after replacing JFFS2. Signed-off-by: Rafał Miłecki SVN-Revision: 48639 --- package/system/mtd/src/trx.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) (limited to 'package/system/mtd/src/trx.c') diff --git a/package/system/mtd/src/trx.c b/package/system/mtd/src/trx.c index 5763917827..00c4d6c0b5 100644 --- a/package/system/mtd/src/trx.c +++ b/package/system/mtd/src/trx.c @@ -44,8 +44,6 @@ struct trx_header { uint32_t offsets[3]; /* Offsets of partitions from start of header */ }; -#define SEAMA_MAGIC 0x17a4a35e - #if __BYTE_ORDER == __BIG_ENDIAN #define STORE32_LE(X) ((((X) & 0x000000FF) << 24) | (((X) & 0x0000FF00) << 8) | (((X) & 0x00FF0000) >> 8) | (((X) & 0xFF000000) >> 24)) #elif __BYTE_ORDER == __LITTLE_ENDIAN @@ -114,16 +112,14 @@ trx_check(int imagefd, const char *mtd, char *buf, int *len) if (strcmp(mtd, "firmware") != 0) return 1; - *len = read(imagefd, buf, 32); if (*len < 32) { - fprintf(stdout, "Could not get image header, file too small (%d bytes)\n", *len); - return 0; + *len += read(imagefd, buf + *len, 32 - *len); + if (*len < 32) { + fprintf(stdout, "Could not get image header, file too small (%d bytes)\n", *len); + return 0; + } } - /* Allow writing Seama files to firmware without an extra validation */ - if (trx->magic == SEAMA_MAGIC) - return 1; - if (trx->magic != TRX_MAGIC || trx->len < sizeof(struct trx_header)) { if (quiet < 2) { fprintf(stderr, "Bad trx header\n"); -- cgit v1.2.3