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:
parent
1d628f0cbe
commit
30edc32888
1 changed files with 22 additions and 16 deletions
|
@ -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)) {
|
||||||
|
|
Loading…
Reference in a new issue