Verification logic now verifies both by-block and crc32
This commit is contained in:
parent
2c2fcd6c8e
commit
cf85ca788a
1 changed files with 14 additions and 1 deletions
15
writeimg.c
15
writeimg.c
|
|
@ -1,3 +1,4 @@
|
|||
#include "crc32.h"
|
||||
#include <assert.h>
|
||||
#include <fcntl.h>
|
||||
#include <getopt.h>
|
||||
|
|
@ -73,10 +74,13 @@ int perform_write(write_job_t *job) {
|
|||
/* TODO: Checks */
|
||||
assert(job->bufsize >= job->block_size);
|
||||
|
||||
int crc = crc32_init();
|
||||
|
||||
while (!job->verify_only) {
|
||||
ssize_t read_bytes = read(file_fd, job->buffer, job->block_size);
|
||||
if (read_bytes == 0) {
|
||||
fsync(block_fd);
|
||||
crc = crc32_finalize(crc);
|
||||
break; /* Finished */
|
||||
}
|
||||
|
||||
|
|
@ -86,6 +90,8 @@ int perform_write(write_job_t *job) {
|
|||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
crc = crc32_update(crc, job->buffer, read_bytes);
|
||||
|
||||
ssize_t written_bytes = write(block_fd, job->buffer, read_bytes);
|
||||
if (written_bytes < 0) {
|
||||
fprintf(stderr, "%s: Write error\n", job->dev_name);
|
||||
|
|
@ -100,6 +106,8 @@ int perform_write(write_job_t *job) {
|
|||
memset(job->buffer, 0, BLOCKSIZE);
|
||||
memset(job->buffer2, 0, BLOCKSIZE);
|
||||
|
||||
int crc_back = crc32_init();
|
||||
|
||||
while (1) {
|
||||
ssize_t read_file = read(file_fd, job->buffer2, job->block_size);
|
||||
ssize_t read_block = read(block_fd, job->buffer, read_file);
|
||||
|
|
@ -108,8 +116,13 @@ int perform_write(write_job_t *job) {
|
|||
assert(read_block >= 0);
|
||||
assert(read_file >= 0);
|
||||
|
||||
if (read_file == 0)
|
||||
if (read_file == 0) {
|
||||
crc_back = crc32_finalize(crc_back);
|
||||
assert(crc_back == crc);
|
||||
break;
|
||||
}
|
||||
|
||||
crc_back = crc32_update(crc_back, job->buffer, read_file);
|
||||
|
||||
int cmp = memcmp((const void *)job->buffer2, (const void *)job->buffer, (size_t)read_file);
|
||||
if (0 != cmp) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue