From 5c97ee34228648f3240ee089b82f7d44865c06c1 Mon Sep 17 00:00:00 2001 From: SarahW Date: Mon, 10 Jul 2017 21:10:04 +0100 Subject: [PATCH] Fixed corruption on large (>4GB) drives. --- src/hdd_file.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/hdd_file.c b/src/hdd_file.c index fdfd77e..7d250e7 100644 --- a/src/hdd_file.c +++ b/src/hdd_file.c @@ -59,7 +59,8 @@ int hdd_read_sectors(hdd_file_t *hdd, int offset, int nr_sectors, void *buffer) if ((hdd->sectors - offset) < transfer_sectors) transfer_sectors = hdd->sectors - offset; - addr = offset * 512; + addr = (uint64_t)offset * 512; + fseeko64(hdd->f, addr, SEEK_SET); fread(buffer, transfer_sectors*512, 1, hdd->f); @@ -75,7 +76,8 @@ int hdd_write_sectors(hdd_file_t *hdd, int offset, int nr_sectors, void *buffer) if ((hdd->sectors - offset) < transfer_sectors) transfer_sectors = hdd->sectors - offset; - addr = offset * 512; + addr = (uint64_t)offset * 512; + fseeko64(hdd->f, addr, SEEK_SET); fwrite(buffer, transfer_sectors*512, 1, hdd->f); @@ -95,7 +97,7 @@ int hdd_format_sectors(hdd_file_t *hdd, int offset, int nr_sectors) if ((hdd->sectors - offset) < transfer_sectors) transfer_sectors = hdd->sectors - offset; - addr = offset * 512; + addr = (uint64_t)offset * 512; fseeko64(hdd->f, addr, SEEK_SET); for (c = 0; c < transfer_sectors; c++) fwrite(zero_buffer, 512, 1, hdd->f);