VirtualBox

Changeset 25963 in vbox


Ignore:
Timestamp:
Jan 22, 2010 12:17:32 AM (15 years ago)
Author:
vboxsync
Message:

VHD: Fix incompatibility with Virtual PC

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Storage/VHDHDDCore.cpp

    r24527 r25963  
    113113    uint32_t ParentTimeStamp;
    114114    uint32_t Reserved0;
    115     uint8_t  ParentUnicodeName[512];
     115    uint16_t ParentUnicodeName[256];
    116116    VHDPLE   ParentLocatorEntry[VHD_MAX_LOCATOR_ENTRIES];
    117117    uint8_t  Reserved1[256];
     
    401401}
    402402
    403 static int vhdFilenameToUtf16(const char *pszFilename, void *pvBuf, uint32_t cbBufSize, uint32_t *pcbActualSize)
     403static int vhdFilenameToUtf16(const char *pszFilename, uint16_t *pu16Buf, uint32_t cbBufSize, uint32_t *pcbActualSize, bool fBigEndian)
    404404{
    405405    int      rc;
     
    416416        goto out;
    417417    }
    418     memcpy(pvBuf, tmp16, cTmp16Len * sizeof(*tmp16));
     418
     419    if (fBigEndian)
     420        for (unsigned i = 0; i < cTmp16Len; i++)
     421            pu16Buf[i] = RT_H2BE_U16(tmp16[i]);
     422    else
     423        memcpy(pu16Buf, tmp16, cTmp16Len * sizeof(*tmp16));
    419424    if (pcbActualSize)
    420425        *pcbActualSize = (uint32_t)(cTmp16Len * sizeof(*tmp16));
     
    464469        case VHD_PLATFORM_CODE_W2RU:
    465470            /* Update unicode relative name. */
    466             rc = vhdFilenameToUtf16(pszFilename, pvBuf, cbMaxLen, &cb);
     471            rc = vhdFilenameToUtf16(pszFilename, (uint16_t *)pvBuf, cbMaxLen, &cb, false);
    467472            if (RT_FAILURE(rc))
    468473                goto out;
     
    483488                goto out;
    484489            }
    485             rc = vhdFilenameToUtf16(pszTmp, pvBuf, cbMaxLen, &cb);
     490            rc = vhdFilenameToUtf16(pszTmp, (uint16_t *)pvBuf, cbMaxLen, &cb, false);
    486491            RTMemTmpFree(pszTmp);
    487492            if (RT_FAILURE(rc))
     
    530535    {
    531536        rc = vhdFilenameToUtf16(RTPathFilename(pImage->pszParentFilename),
    532              ddh.ParentUnicodeName, sizeof(ddh.ParentUnicodeName) - 1, NULL);
     537             ddh.ParentUnicodeName, sizeof(ddh.ParentUnicodeName) - 1, NULL, true);
    533538        if (RT_FAILURE(rc))
    534539            return rc;
     
    18851890
    18861891    Footer.DataOffset = RT_H2BE_U64(pImage->u64DataOffset);
    1887     pImage->vhdFooterCopy = Footer;
    18881892
    18891893    /* Compute and update the footer checksum. */
    18901894    Footer.Checksum = 0;
    18911895    Footer.Checksum = RT_H2BE_U32(vhdChecksum(&Footer, sizeof(Footer)));
     1896
     1897    pImage->vhdFooterCopy = Footer;
    18921898
    18931899    /* Store the footer */
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette