Author: rmilecki
Date: 2016-05-09 20:10:30 +0200 (Mon, 09 May 2016)
New Revision: 49316

Modified:
   trunk/package/system/mtd/src/trx.c
Log:
mtd: trx: use separated buffer for TRX header

We plan to adjust usage of the main buffer to allow reading custom
amount of data for CRC32. This means we need another buffer that will be
always block aligned.

Signed-off-by: Rafa{U+0142} Mi{U+0142}ecki <[email protected]>

Modified: trunk/package/system/mtd/src/trx.c
===================================================================
--- trunk/package/system/mtd/src/trx.c  2016-05-09 15:34:13 UTC (rev 49315)
+++ trunk/package/system/mtd/src/trx.c  2016-05-09 18:10:30 UTC (rev 49316)
@@ -152,6 +152,7 @@
 {
        int fd;
        struct trx_header *trx;
+       char *first_block;
        char *buf;
        ssize_t res;
        size_t block_offset;
@@ -173,19 +174,19 @@
                exit(1);
        }
 
-       buf = malloc(erasesize);
-       if (!buf) {
+       first_block = malloc(erasesize);
+       if (!first_block) {
                perror("malloc");
                exit(1);
        }
 
-       res = pread(fd, buf, erasesize, block_offset);
+       res = pread(fd, first_block, erasesize, block_offset);
        if (res != erasesize) {
                perror("pread");
                exit(1);
        }
 
-       trx = (struct trx_header *) (buf + offset);
+       trx = (struct trx_header *)(first_block + offset);
        if (trx->magic != STORE32_LE(0x30524448)) {
                fprintf(stderr, "No trx magic found\n");
                exit(1);
@@ -198,6 +199,18 @@
                return 0;
        }
 
+       buf = malloc(erasesize);
+       if (!buf) {
+               perror("malloc");
+               exit(1);
+       }
+
+       res = pread(fd, buf, erasesize, block_offset);
+       if (res != erasesize) {
+               perror("pread");
+               exit(1);
+       }
+
        trx->len = STORE32_LE(erasesize - offset);
 
        trx->crc32 = STORE32_LE(crc32buf((char*) &trx->flag_version, erasesize 
- offset - 3*4));
@@ -209,7 +222,7 @@
        if (quiet < 2)
                fprintf(stderr, "New crc32: 0x%x, rewriting block\n", 
trx->crc32);
 
-       if (pwrite(fd, buf, erasesize, block_offset) != erasesize) {
+       if (pwrite(fd, first_block, erasesize, block_offset) != erasesize) {
                fprintf(stderr, "Error writing block (%s)\n", strerror(errno));
                exit(1);
        }
_______________________________________________
openwrt-commits mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-commits

Reply via email to