aboutsummaryrefslogtreecommitdiffstats
path: root/package/system/mtd/src/trx.c
diff options
context:
space:
mode:
authorRafał Miłecki <zajec5@gmail.com>2016-02-06 16:29:12 +0000
committerRafał Miłecki <zajec5@gmail.com>2016-02-06 16:29:12 +0000
commitf7e897354a28d43975eb152bcc8fcd146a22e860 (patch)
tree6b08e767d4de86f17bb14efb8639d1bc597ddd3d /package/system/mtd/src/trx.c
parent6d9bb6e3efef38a81c1783ca9a3e1553f4ebb131 (diff)
downloadmaster-187ad058-f7e897354a28d43975eb152bcc8fcd146a22e860.tar.gz
master-187ad058-f7e897354a28d43975eb152bcc8fcd146a22e860.tar.bz2
master-187ad058-f7e897354a28d43975eb152bcc8fcd146a22e860.zip
mtd: detect image format when writing
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 <zajec5@gmail.com> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@48639 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/system/mtd/src/trx.c')
-rw-r--r--package/system/mtd/src/trx.c14
1 files changed, 5 insertions, 9 deletions
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");