mtd: support -c (datasize) option for fixseama command
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
This commit is contained in:
parent
cf6d9d97fb
commit
7e08f2ccbd
3 changed files with 9 additions and 7 deletions
|
@ -674,7 +674,7 @@ resume:
|
||||||
break;
|
break;
|
||||||
case MTD_IMAGE_FORMAT_SEAMA:
|
case MTD_IMAGE_FORMAT_SEAMA:
|
||||||
if (mtd_fixseama)
|
if (mtd_fixseama)
|
||||||
mtd_fixseama(mtd, 0);
|
mtd_fixseama(mtd, 0, 0);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -737,8 +737,10 @@ static void usage(void)
|
||||||
if (mtd_fixtrx) {
|
if (mtd_fixtrx) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
" -o offset offset of the image header in the partition(for fixtrx)\n");
|
" -o offset offset of the image header in the partition(for fixtrx)\n");
|
||||||
|
}
|
||||||
|
if (mtd_fixtrx || mtd_fixseama) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
" -c datasize amount of data to be used for checksum calculation (for fixtrx)\n");
|
" -c datasize amount of data to be used for checksum calculation (for fixtrx / fixseama)\n");
|
||||||
}
|
}
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
#ifdef FIS_SUPPORT
|
#ifdef FIS_SUPPORT
|
||||||
|
@ -987,7 +989,7 @@ int main (int argc, char **argv)
|
||||||
break;
|
break;
|
||||||
case CMD_FIXSEAMA:
|
case CMD_FIXSEAMA:
|
||||||
if (mtd_fixseama)
|
if (mtd_fixseama)
|
||||||
mtd_fixseama(device, 0);
|
mtd_fixseama(device, 0, data_size);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,6 @@ extern void mtd_parse_jffs2data(const char *buf, const char *dir);
|
||||||
extern int trx_fixup(int fd, const char *name) __attribute__ ((weak));
|
extern int trx_fixup(int fd, const char *name) __attribute__ ((weak));
|
||||||
extern int trx_check(int imagefd, const char *mtd, char *buf, int *len) __attribute__ ((weak));
|
extern int trx_check(int imagefd, const char *mtd, char *buf, int *len) __attribute__ ((weak));
|
||||||
extern int mtd_fixtrx(const char *mtd, size_t offset, size_t data_size) __attribute__ ((weak));
|
extern int mtd_fixtrx(const char *mtd, size_t offset, size_t data_size) __attribute__ ((weak));
|
||||||
extern int mtd_fixseama(const char *mtd, size_t offset) __attribute__ ((weak));
|
extern int mtd_fixseama(const char *mtd, size_t offset, size_t data_size) __attribute__ ((weak));
|
||||||
extern int mtd_resetbc(const char *mtd) __attribute__ ((weak));
|
extern int mtd_resetbc(const char *mtd) __attribute__ ((weak));
|
||||||
#endif /* __mtd_h */
|
#endif /* __mtd_h */
|
||||||
|
|
|
@ -104,14 +104,13 @@ err_out:
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
mtd_fixseama(const char *mtd, size_t offset)
|
mtd_fixseama(const char *mtd, size_t offset, size_t data_size)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
char *first_block;
|
char *first_block;
|
||||||
ssize_t res;
|
ssize_t res;
|
||||||
size_t block_offset;
|
size_t block_offset;
|
||||||
size_t data_offset;
|
size_t data_offset;
|
||||||
size_t data_size;
|
|
||||||
struct seama_entity_header *shdr;
|
struct seama_entity_header *shdr;
|
||||||
|
|
||||||
if (quiet < 2)
|
if (quiet < 2)
|
||||||
|
@ -155,7 +154,8 @@ mtd_fixseama(const char *mtd, size_t offset)
|
||||||
}
|
}
|
||||||
|
|
||||||
data_offset = offset + sizeof(struct seama_entity_header) + ntohs(shdr->metasize);
|
data_offset = offset + sizeof(struct seama_entity_header) + ntohs(shdr->metasize);
|
||||||
data_size = mtdsize - data_offset;
|
if (!data_size)
|
||||||
|
data_size = mtdsize - data_offset;
|
||||||
if (data_size > ntohl(shdr->size))
|
if (data_size > ntohl(shdr->size))
|
||||||
data_size = ntohl(shdr->size);
|
data_size = ntohl(shdr->size);
|
||||||
if (seama_fix_md5(shdr, fd, data_offset, data_size))
|
if (seama_fix_md5(shdr, fd, data_offset, data_size))
|
||||||
|
|
Loading…
Reference in a new issue