mtd: seama: move buf allocation to the MD5 function

This buf is only used in this function now, so lets move it there.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
This commit is contained in:
rmilecki 2016-05-09 12:53:36 +00:00 committed by Rafał Miłecki
parent 1d628f0cbe
commit 30edc32888

View file

@ -51,18 +51,34 @@ ssize_t pread(int fd, void *buf, size_t count, off_t offset);
ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset); ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);
int int
seama_fix_md5(struct seama_entity_header *shdr, char *buf, size_t len) seama_fix_md5(struct seama_entity_header *shdr, int fd, size_t len, size_t block_offset)
{ {
char *buf;
char *data; char *data;
ssize_t res;
size_t msize; size_t msize;
size_t isize; size_t isize;
MD5_CTX ctx; MD5_CTX ctx;
unsigned char digest[16]; unsigned char digest[16];
int i; int i;
int err = 0;
if (len < sizeof(struct seama_entity_header)) if (len < sizeof(struct seama_entity_header))
return -1; return -1;
buf = malloc(len);
if (!buf) {
err = -ENOMEM;
goto err_out;
}
res = pread(fd, buf, len, block_offset);
if (res != len) {
perror("pread");
err = -EIO;
goto err_free;
}
isize = ntohl(shdr->size); isize = ntohl(shdr->size);
msize = ntohs(shdr->metasize); msize = ntohs(shdr->metasize);
if (isize == 0) { if (isize == 0) {
@ -100,7 +116,10 @@ seama_fix_md5(struct seama_entity_header *shdr, char *buf, size_t len)
/* update the checksum in the image */ /* update the checksum in the image */
memcpy(shdr->md5, digest, sizeof(digest)); memcpy(shdr->md5, digest, sizeof(digest));
return 0; err_free:
free(buf);
err_out:
return err;
} }
int int
@ -108,7 +127,6 @@ mtd_fixseama(const char *mtd, size_t offset)
{ {
int fd; int fd;
char *first_block; char *first_block;
char *buf;
ssize_t res; ssize_t res;
size_t block_offset; size_t block_offset;
struct seama_entity_header *shdr; struct seama_entity_header *shdr;
@ -150,19 +168,7 @@ mtd_fixseama(const char *mtd, size_t offset)
return -1; return -1;
} }
buf = malloc(mtdsize); if (seama_fix_md5(shdr, fd, mtdsize, block_offset))
if (!buf) {
perror("malloc");
exit(1);
}
res = pread(fd, buf, mtdsize, block_offset);
if (res != mtdsize) {
perror("pread");
exit(1);
}
if (seama_fix_md5(shdr, buf, mtdsize))
goto out; goto out;
if (mtd_erase_block(fd, block_offset)) { if (mtd_erase_block(fd, block_offset)) {