Optimize hdd_image read/write

About 30-40% speedup
This commit is contained in:
Adrien Moulin
2022-07-10 13:50:01 +02:00
parent 4c93710d79
commit 24f11448f2

View File

@@ -499,20 +499,16 @@ hdd_image_read(uint8_t id, uint32_t sector, uint32_t count, uint8_t *buffer)
int non_transferred_sectors = mvhd_read_sectors(hdd_images[id].vhd, sector, count, buffer);
hdd_images[id].pos = sector + count - non_transferred_sectors - 1;
} else {
int i;
if (fseeko64(hdd_images[id].file, ((uint64_t)(sector) << 9LL) + hdd_images[id].base, SEEK_SET) == -1) {
fatal("Hard disk image %i: Read error during seek\n", id);
return;
}
for (i = 0; i < count; i++) {
if (feof(hdd_images[id].file))
break;
hdd_images[id].pos = sector + i;
fread(buffer + (i << 9), 1, 512, hdd_images[id].file);
size_t num_read = fread(buffer, 512, count, hdd_images[id].file);
if (num_read != count) {
fatal("Hard disk image %i: Read error\n", id);
}
hdd_images[id].pos = sector + num_read;
}
}
@@ -555,20 +551,16 @@ hdd_image_write(uint8_t id, uint32_t sector, uint32_t count, uint8_t *buffer)
int non_transferred_sectors = mvhd_write_sectors(hdd_images[id].vhd, sector, count, buffer);
hdd_images[id].pos = sector + count - non_transferred_sectors - 1;
} else {
int i;
if (fseeko64(hdd_images[id].file, ((uint64_t)(sector) << 9LL) + hdd_images[id].base, SEEK_SET) == -1) {
fatal("Hard disk image %i: Write error during seek\n", id);
return;
}
for (i = 0; i < count; i++) {
if (feof(hdd_images[id].file))
break;
hdd_images[id].pos = sector + i;
fwrite(buffer + (i << 9), 512, 1, hdd_images[id].file);
size_t num_write = fwrite(buffer, 512, count, hdd_images[id].file);
if (num_write != count) {
fatal("Hard disk image %i: Write error\n", id);
}
hdd_images[id].pos = sector + num_write;
}
}