after the fix, VHD->VMDk seems to be working fine, but VHD->VDI still not 
working, the generated vdi disk throws invalid header error.

--- On Wed, 10/7/09, Huihong Luo <[email protected]> wrote:


From: Huihong Luo <[email protected]>
Subject: [vbox-dev] VDCopy() fix for VHD
To: [email protected]
Date: Wednesday, October 7, 2009, 12:30 AM







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
-----Inline Attachment Follows-----


_______________________________________________
vbox-dev mailing list
[email protected]
http://vbox.innotek.de/mailman/listinfo/vbox-dev
_______________________________________________
vbox-dev mailing list
[email protected]
http://vbox.innotek.de/mailman/listinfo/vbox-dev

Reply via email to