diff --git a/src/minivhd_io.c b/src/minivhd_io.c index b128586..2967b93 100644 --- a/src/minivhd_io.c +++ b/src/minivhd_io.c @@ -1,5 +1,6 @@ #include #include +#include "bswap.h" #include "minivhd_internal.h" #include "minivhd_util.h" @@ -56,8 +57,9 @@ static void mvhd_write_sect_bitmap(MVHDMeta* vhdm, int blk) { static void mvhd_write_bat_entry(MVHDMeta* vhdm, int blk) { uint64_t table_offset = vhdm->sparse.bat_offset + (blk * sizeof vhdm->block[blk].offset); + uint32_t offset = cpu_to_be32(vhdm->block[blk].offset); fseeko64(vhdm->f, table_offset, SEEK_SET); - fwrite(&vhdm->block[blk].offset, sizeof vhdm->block[blk].offset, 1, vhdm->f); + fwrite(&offset, sizeof offset, 1, vhdm->f); } static void mvhd_create_block(MVHDMeta* vhdm, int blk) { diff --git a/src/minivhd_manage.c b/src/minivhd_manage.c index 3e0d9da..44ea9ec 100644 --- a/src/minivhd_manage.c +++ b/src/minivhd_manage.c @@ -73,6 +73,7 @@ static MVHDBlock* mvhd_read_bat(MVHDMeta *vhdm, MVHDError* err) { fseeko64(vhdm->f, vhdm->sparse.bat_offset, SEEK_SET); for (uint32_t i = 0; i < vhdm->sparse.max_bat_ent; i++) { fread(&vhdm->block[i].offset, sizeof vhdm->block[i].offset, 1, vhdm->f); + vhdm->block[i].offset = be32_to_cpu(vhdm->block[i].offset); vhdm->block[i].bitmap = NULL; vhdm->block[i].bitmap_cached = false; }