X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=package%2Fsystem%2Fmtd%2Fsrc%2Fmtd.c;h=60ae7adcdfac56541deb6a460175679a91baaffa;hb=8a60a419512db35f4d3583589e0e623a1a2f00c9;hp=03ee5671d5d4c32575ba13987c8ca94159460022;hpb=b5c41ad28c31d61d6eb9a0c0f3550e75ea74e09f;p=librecmc%2Flibrecmc.git diff --git a/package/system/mtd/src/mtd.c b/package/system/mtd/src/mtd.c index 03ee5671d5..60ae7adcdf 100644 --- a/package/system/mtd/src/mtd.c +++ b/package/system/mtd/src/mtd.c @@ -179,14 +179,21 @@ image_check(int imagefd, const char *mtd) { uint32_t magic; int ret = 1; + int bufread; + + while (buflen < sizeof(magic)) { + bufread = read(imagefd, buf + buflen, sizeof(magic) - buflen); + if (bufread < 1) + break; + + buflen += bufread; + } if (buflen < sizeof(magic)) { - buflen += read(imagefd, buf + buflen, sizeof(magic) - buflen); - if (buflen < sizeof(magic)) { - fprintf(stdout, "Could not get image magic\n"); - return 0; - } + fprintf(stdout, "Could not get image magic\n"); + return 0; } + magic = ((uint32_t *)buf)[0]; if (be32_to_cpu(magic) == TRX_MAGIC) @@ -659,8 +666,19 @@ resume: offset = 0; } - if (jffs2_replaced && trx_fixup) { - trx_fixup(fd, mtd); + if (jffs2_replaced) { + switch (imageformat) { + case MTD_IMAGE_FORMAT_TRX: + if (trx_fixup) + trx_fixup(fd, mtd); + break; + case MTD_IMAGE_FORMAT_SEAMA: + if (mtd_fixseama) + mtd_fixseama(mtd, 0); + break; + default: + break; + } } if (!quiet) @@ -948,16 +966,16 @@ int main (int argc, char **argv) mtd_write_jffs2(device, imagefile, jffs2dir); break; case CMD_FIXTRX: - if (mtd_fixtrx) { - mtd_fixtrx(device, offset); - } + if (mtd_fixtrx) { + mtd_fixtrx(device, offset); + } case CMD_RESETBC: - if (mtd_resetbc) { - mtd_resetbc(device); - } + if (mtd_resetbc) { + mtd_resetbc(device); + } case CMD_FIXSEAMA: if (mtd_fixseama) - mtd_fixseama(device, 0); + mtd_fixseama(device, 0); break; }