Verification logic now verifies both by-block and crc32

This commit is contained in:
Imbus 2026-02-07 13:23:53 +01:00
parent 2c2fcd6c8e
commit cf85ca788a

View file

@ -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) {