diff --git a/src/minivhd_io.c b/src/minivhd_io.c index 520a5f2..cc6f482 100644 --- a/src/minivhd_io.c +++ b/src/minivhd_io.c @@ -98,4 +98,15 @@ int mvhd_diff_read(MVHDMeta* vhdm, int offset, int num_sectors, void* out_buff) buff += MVHD_SECTOR_SIZE; } return truncated_sectors; +} + +int mvhd_fixed_write(MVHDMeta* vhdm, int offset, int num_sectors, void* in_buff) { + int64_t addr; + int transfer_sectors, truncated_sectors; + int total_sectors = vhdm->footer.geom.cyl * vhdm->footer.geom.heads * vhdm->footer.geom.spt; + mvhd_check_sectors(offset, num_sectors, total_sectors, &transfer_sectors, &truncated_sectors); + addr = (int64_t)offset * MVHD_SECTOR_SIZE; + fseeko64(vhdm->f, addr, SEEK_SET); + fwrite(in_buff, transfer_sectors*MVHD_SECTOR_SIZE, 1, vhdm->f); + return truncated_sectors; } \ No newline at end of file diff --git a/src/minivhd_io.h b/src/minivhd_io.h index 30c4d5b..2680b35 100644 --- a/src/minivhd_io.h +++ b/src/minivhd_io.h @@ -6,4 +6,7 @@ int mvhd_fixed_read(MVHDMeta* vhdm, int offset, int num_sectors, void* out_buff) int mvhd_sparse_read(MVHDMeta* vhdm, int offset, int num_sectors, void* out_buff); int mvhd_diff_read(MVHDMeta* vhdm, int offset, int num_sectors, void* out_buff); +int mvhd_fixed_write(MVHDMeta* vhdm, int offset, int num_sectors, void* in_buff); +int mvhd_sparse_diff_write(MVHDMeta* vhdm, int offset, int num_sectors, void* in_buff); + #endif \ No newline at end of file