[vbox-dev] VDCopy() fix for VHD
Huihong Luo
huisinro at yahoo.com
Wed Oct 7 00:30:00 PDT 2009
Can you guys add the following code to function VDCopy() in VBoxHDD.cpp? right before VDCreateBase() is called.
It resets the geometry if cSectors > 63, VHD disk somehow has more than 63 sectors.
/* vmlite, fix converting error from VHD */
if (PCHSGeometryFrom.cHeads > 16 || PCHSGeometryFrom.cSectors > 63)
{
Assert(RT_MIN(cbSize / 512 / 16 / 63, 16383) -
(unsigned int)RT_MIN(cbSize / 512 / 16 / 63, 16383) == 0);
PCHSGeometryFrom.cCylinders = (unsigned int)RT_MIN(cbSize / 512 / 16 / 63, 16383);
PCHSGeometryFrom.cHeads = 16;
PCHSGeometryFrom.cSectors = 63;
}
/* vmlite */
rc = VDCreateBase(pDiskTo, pszBackend, pszFilename, cbSize,
uImageFlags, szComment,
&PCHSGeometryFrom, &LCHSGeometryFrom,
NULL, uOpenFlagsFrom & ~VD_OPEN_FLAGS_READONLY, NULL, NULL);
if (RT_SUCCESS(rc) && !RTUuidIsNull(&ImageUuid))
pDiskTo->pLast->Backend->pfnSetUuid(pDiskTo->pLast->pvBackendData, &ImageUuid);
if (RT_SUCCESS(rc) && !RTUuidIsNull(&ParentUuid))
pDiskTo->pLast->Backend->pfnSetParentUuid(pDiskTo->pLast->pvBackendData, &ParentUuid);
- Huihong
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.virtualbox.org/pipermail/vbox-dev/attachments/20091007/2d97d018/attachment-0001.html
More information about the vbox-dev
mailing list