VMDK_SECTOR_SIZE
grainsz /= VMDK_SECTOR_SIZE;
imagesz = (image_get_size() * secsz) / VMDK_SECTOR_SIZE;
desc_len = (n + VMDK_SECTOR_SIZE - 1) & ~(VMDK_SECTOR_SIZE - 1);
le64enc(&hdr.desc_size, desc_len / VMDK_SECTOR_SIZE);
sec = desc_len / VMDK_SECTOR_SIZE + 1;
gdsz = (ngts * sizeof(uint32_t) + VMDK_SECTOR_SIZE - 1) &
~(VMDK_SECTOR_SIZE - 1);
sec += gdsz / VMDK_SECTOR_SIZE;
sec += VMDK_NGTES * sizeof(uint32_t) / VMDK_SECTOR_SIZE;
sec += gdsz / VMDK_SECTOR_SIZE;
sec += VMDK_NGTES * sizeof(uint32_t) / VMDK_SECTOR_SIZE;
(uintmax_t)(sec * VMDK_SECTOR_SIZE));
blkcnt = (grainsz * VMDK_SECTOR_SIZE) / secsz;
if (!error && sparse_write(fd, &hdr, VMDK_SECTOR_SIZE) < 0)
cur = VMDK_SECTOR_SIZE + desc_len + (gdsz + gtsz) * 2;
lim = sec * VMDK_SECTOR_SIZE;
buf = calloc(1, VMDK_SECTOR_SIZE);
if (sparse_write(fd, buf, VMDK_SECTOR_SIZE) < 0)
cur += VMDK_SECTOR_SIZE;
blkcnt = (grainsz * VMDK_SECTOR_SIZE) / secsz;