VirtualBox

Changeset 50203 in vbox for trunk


Ignore:
Timestamp:
Jan 24, 2014 12:10:01 AM (11 years ago)
Author:
vboxsync
Message:

Main: Removed the USE_RTTAR_FOR_READING code.

Location:
trunk/src/VBox/Main
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/include/ApplianceImpl.h

    r50200 r50203  
    173173                            PVDINTERFACEIO pCallbacks,
    174174                            PSHASTORAGE pStorage);
    175     HRESULT i_readTarFileToBuf(
    176 #ifdef USE_RTTAR_FOR_READING
    177                                RTTAR tar,
    178 #else
    179                                struct FSSRDONLYINTERFACEIO *pTarIo,
    180 #endif
     175    HRESULT i_readTarFileToBuf(struct FSSRDONLYINTERFACEIO *pTarIo,
    181176                               const Utf8Str &strFile,
    182177                               void **ppvBuf,
  • trunk/src/VBox/Main/src-server/ApplianceImplImport.cpp

    r50200 r50203  
    786786                                               RTCString &availableImage)
    787787{
    788 #ifdef USE_RTTAR_FOR_READING
    789     RTTAR tar = (RTTAR)pSHAStorage->pVDImageIfaces->pvUser;
    790     char *pszFilename = 0;
    791 
    792     int vrc = RTTarCurrentFile(tar, &pszFilename);
    793     if (RT_FAILURE(vrc))
    794         throw setError(VBOX_E_FILE_ERROR,
    795                        tr("Could not open the current file in the OVA package (%Rrc)"), vrc);
    796     if (vrc == VINF_TAR_DIR_PATH)
    797     {
    798         HRESULT hrc = setError(VBOX_E_FILE_ERROR,
    799                                tr("Empty directory folder (%s) isn't allowed in the OVA package (%Rrc)"),
    800                                pszFilename, vrc);
    801         RTStrFree(pszFilename);
    802         throw hrc;
    803     }
    804 
    805     availableImage = pszFilename;
    806     return S_OK;
    807 
    808 #else
    809788    PFSSRDONLYINTERFACEIO pTarIo = (PFSSRDONLYINTERFACEIO)pSHAStorage->pVDImageIfaces->pvUser;
    810789    const char *pszFilename;
     
    823802
    824803    throw setError(VBOX_E_FILE_ERROR, tr("Could not open the current file in the OVA package (%Rrc)"), vrc);
    825 #endif
    826804}
    827805
     
    10641042    LogFlowFuncEnter();
    10651043
    1066 #ifdef USE_RTTAR_FOR_READING
    1067     RTTAR tar;
    1068     HRESULT rc = S_OK;
    1069     int vrc = 0;
    1070     PVDINTERFACEIO pShaIo = 0;
    1071     PVDINTERFACEIO pTarIo = 0;
    1072     char *pszFilename = 0;
    1073     SHASTORAGE storage;
    1074 
    1075     RT_ZERO(storage);
    1076 
    1077     vrc = RTTarOpen(&tar, pTask->locInfo.strPath.c_str(), RTFILE_O_OPEN | RTFILE_O_READ | RTFILE_O_DENY_NONE, true);
    1078     if (RT_FAILURE(vrc))
    1079         rc = setError(VBOX_E_FILE_ERROR,
    1080                         tr("Could not open the OVA file '%s' (%Rrc)"),
    1081                         pTask->locInfo.strPath.c_str(), vrc);
    1082     else
    1083     {
    1084         do
    1085         {
    1086             vrc = RTTarCurrentFile(tar, &pszFilename);
    1087             if (RT_FAILURE(vrc))
    1088             {
    1089                 rc = VBOX_E_FILE_ERROR;
    1090                 break;
    1091             }
    1092 
    1093             Utf8Str suffix(RTPathSuffix(pszFilename));
    1094 
    1095             if (!suffix.endsWith(".ovf",Utf8Str::CaseInsensitive))
    1096             {
    1097                 vrc = VERR_FILE_NOT_FOUND;
    1098                 rc = setError(VBOX_E_FILE_ERROR,
    1099                               tr("First file in the OVA package must have the extension 'ovf'. "
    1100                                  "But the file '%s' has a different extension (%Rrc)"),
    1101                                  pszFilename,
    1102                                  vrc);
    1103                 break;
    1104             }
    1105 
    1106             pTarIo = TarCreateInterface();
    1107             if (!pTarIo)
    1108             {
    1109                 rc = E_OUTOFMEMORY;
    1110                 break;
    1111             }
    1112 
    1113             pShaIo = ShaCreateInterface();
    1114             if (!pShaIo)
    1115             {
    1116                 rc = E_OUTOFMEMORY;
    1117                 break ;
    1118             }
    1119 
    1120             Utf8Str name = i_applianceIOName(applianceIOTar);
    1121 
    1122             vrc = VDInterfaceAdd(&pTarIo->Core, name.c_str(),
    1123                                  VDINTERFACETYPE_IO, tar, sizeof(VDINTERFACEIO),
    1124                                  &storage.pVDImageIfaces);
    1125             if (RT_FAILURE(vrc))
    1126             {
    1127                 rc = setError(VBOX_E_IPRT_ERROR, "Creation of the VD interface failed (%Rrc)", vrc);
    1128                 break;
    1129             }
    1130 
    1131             rc = i_readFSImpl(pTask, pszFilename, pShaIo, &storage);
    1132             if (FAILED(rc))
    1133                 break;
    1134 
    1135         } while (0);
    1136 
    1137         RTTarClose(tar);
    1138     }
    1139 
    1140     /* Cleanup */
    1141     if (pszFilename)
    1142         RTStrFree(pszFilename);
    1143     if (pShaIo)
    1144         RTMemFree(pShaIo);
    1145     if (pTarIo)
    1146         RTMemFree(pTarIo);
    1147 
    1148     LogFlowFunc(("rc=%Rhrc\n", rc));
    1149     LogFlowFuncLeave();
    1150 
    1151     return rc;
    1152 
    1153 #else
    11541044    /*
    11551045     * Open the tar file and get a VD I/O interface for it.
     
    12101100    LogFlowFuncLeave();
    12111101    return hrc;
    1212 #endif
    12131102}
    12141103
     
    16041493            storage.fCreateDigest = true;
    16051494
    1606             size_t cbMfSize = 0;
     1495            size_t cbMfFile = 0;
    16071496
    16081497            /* Now import the appliance. */
     
    16111500            /* Add the ovf file to the digest list. */
    16121501            stack.llSrcDisksDigest.push_front(STRPAIR(pTask->locInfo.strPath, m->strOVFSHADigest));
    1613             rc = i_readFileToBuf(strMfFile, &pvMfBuf, &cbMfSize, true, pShaIo, &storage);
     1502            rc = i_readFileToBuf(strMfFile, &pvMfBuf, &cbMfFile, true, pShaIo, &storage);
    16141503            if (FAILED(rc)) throw rc;
    1615             rc = i_verifyManifestFile(strMfFile, stack, pvMfBuf, cbMfSize);
     1504            rc = i_verifyManifestFile(strMfFile, stack, pvMfBuf, cbMfFile);
    16161505            if (FAILED(rc)) throw rc;
    16171506
    1618             size_t cbCertSize = 0;
     1507            size_t cbCertFile = 0;
    16191508
    16201509            /* Save the SHA digest of the manifest file for the next validation */
     
    16241513            if (RTFileExists(strCertFile.c_str()))
    16251514            {
    1626                 rc = i_readFileToBuf(strCertFile, &pvCertBuf, &cbCertSize, false, pShaIo, &storage);
     1515                rc = i_readFileToBuf(strCertFile, &pvCertBuf, &cbCertFile, false, pShaIo, &storage);
    16271516                if (FAILED(rc)) throw rc;
    16281517
     
    16871576     * Open the OVA (TAR) file.
    16881577     */
    1689 #ifdef USE_RTTAR_FOR_READING
    1690     PVDINTERFACEIO pTarIo = 0;
    1691     RTTAR tar;
    1692     int vrc = RTTarOpen(&tar,
    1693                         pTask->locInfo.strPath.c_str(),
    1694                         RTFILE_O_OPEN | RTFILE_O_READ | RTFILE_O_DENY_NONE, true);
    1695 #else
    16961578    PFSSRDONLYINTERFACEIO pTarIo;
    16971579    int vrc = fssRdOnlyCreateInterfaceForTarFile(pTask->locInfo.strPath.c_str(), &pTarIo);
    1698     PFSSRDONLYINTERFACEIO tar = pTarIo; /* temporary hack */
    1699 #endif
    17001580    if (RT_FAILURE(vrc))
    17011581        return setError(VBOX_E_FILE_ERROR,
     
    17051585
    17061586    PVDINTERFACEIO pShaIo = 0;
    1707 #ifdef USE_RTTAR_FOR_READING
    1708     char *pszFilename = 0;
    1709 #endif
    1710     void *pvMfBuf = 0;
    1711     void *pvCertBuf = 0;
     1587    void *pvMfBuf = NULL;
     1588    void *pvCertBuf = NULL;
    17121589    Utf8Str OVFfilename;
    17131590
     
    17231600        if (!pShaIo)
    17241601            throw setError(E_OUTOFMEMORY);
    1725 #ifdef USE_RTTAR_FOR_READING
    1726         pTarIo = TarCreateInterface();
    1727         if (!pTarIo)
    1728             throw setError(E_OUTOFMEMORY);
    1729 #endif
    1730 
     1602
     1603        Utf8Str nameTar = i_applianceIOName(applianceIOTar);
    17311604        SHASTORAGE storage;
    17321605        RT_ZERO(storage);
    1733 
    1734         Utf8Str nameTar = i_applianceIOName(applianceIOTar);
    1735 
    1736 #ifdef USE_RTTAR_FOR_READING
    1737         vrc = VDInterfaceAdd(&pTarIo->Core, nameTar.c_str(),
    1738                              VDINTERFACETYPE_IO, tar, sizeof(VDINTERFACEIO),
    1739                              &storage.pVDImageIfaces);
    1740 #else
    17411606        vrc = VDInterfaceAdd((PVDINTERFACE)pTarIo, nameTar.c_str(),
    17421607                             VDINTERFACETYPE_IO, pTarIo, sizeof(VDINTERFACEIO),
    17431608                             &storage.pVDImageIfaces);
    1744 #endif
    17451609        if (RT_FAILURE(vrc))
    17461610            throw setError(VBOX_E_IPRT_ERROR,
    17471611                           tr("Creation of the VD interface failed (%Rrc)"), vrc);
    17481612
     1613        /* Fill out interface descriptor. */
    17491614        Utf8Str nameSha = i_applianceIOName(applianceIOSha);
    1750         /* Fill out interface descriptor. */
    17511615        pShaIo->Core.u32Magic         = VDINTERFACE_MAGIC;
    17521616        pShaIo->Core.cbSize           = sizeof(VDINTERFACEIO);
     
    17621626         * are named.
    17631627         */
    1764 #ifdef USE_RTTAR_FOR_READING
    1765         vrc = RTTarCurrentFile(tar, &pszFilename);
    1766 #else
    17671628        const char *pszFilename;
    17681629        vrc = fssRdOnlyGetCurrentName(pTarIo, &pszFilename);
    1769 #endif
    17701630        if (RT_FAILURE(vrc))
    17711631            throw setError(VBOX_E_IPRT_ERROR,
     
    17781638        /* save original OVF filename */
    17791639        OVFfilename = pszFilename;
    1780         size_t cbMfSize = 0;
    1781         size_t cbCertSize = 0;
    17821640        Utf8Str strMfFile = (Utf8Str(pszFilename)).stripSuffix().append(".mf");
    17831641        Utf8Str strCertFile = (Utf8Str(pszFilename)).stripSuffix().append(".cert");
    17841642
    17851643        /* Skip the OVF file, cause this was read in IAppliance::Read already. */
    1786 #ifdef USE_RTTAR_FOR_READING
    1787         vrc = RTTarSeekNextFile(tar);
    1788         if (   RT_FAILURE(vrc)
    1789             && vrc != VERR_TAR_END_OF_FILE)
    1790             throw setError(VBOX_E_IPRT_ERROR,
    1791                            tr("Seeking within the archive failed (%Rrc)"), vrc);
    1792         RTStrFree(pszFilename);
    1793         pszFilename = NULL;
    1794         RTTarCurrentFile(tar, &pszFilename);
    1795         if (vrc == VINF_TAR_DIR_PATH)
    1796             throw setError(VBOX_E_FILE_ERROR,
    1797                            tr("Empty directory folder (%s) isn't allowed in the OVA package (%Rrc)"),
    1798                            pszFilename, vrc);
    1799 #else
    18001644        vrc = fssRdOnlySkipCurrent(pTarIo);
    18011645        if (RT_SUCCESS(vrc))
     
    18041648            && vrc != VERR_EOF)
    18051649            throw setError(VBOX_E_IPRT_ERROR, tr("Seeking within the archive failed (%Rrc)"), vrc);
    1806 #endif
    18071650
    18081651        PVDINTERFACEIO pCallbacks = pShaIo;
     
    18261669         * If it fails here, we will try it again after all disks where read.
    18271670         */
    1828         rc = i_readTarFileToBuf(tar, strMfFile, &pvMfBuf, &cbMfSize, true, pCallbacks, pStorage);
     1671        size_t cbMfFile = 0;
     1672        rc = i_readTarFileToBuf(pTarIo, strMfFile, &pvMfBuf, &cbMfFile, true, pCallbacks, pStorage);
    18291673        if (FAILED(rc))
    18301674            throw rc;
     
    18361680         * there is a manifest file.
    18371681         */
    1838 #ifdef USE_RTTAR_FOR_READING
    1839         vrc = RTTarCurrentFile(tar, &pszFilename);
    1840 #else
     1682        size_t cbCertFile = 0;
    18411683        vrc = fssRdOnlyGetCurrentName(pTarIo, &pszFilename);
    1842 #endif
    18431684        if (RT_SUCCESS(vrc))
    18441685        {
     
    18471688                if (strCertFile.compare(pszFilename) == 0)
    18481689                {
    1849                     rc = i_readTarFileToBuf(tar, strCertFile, &pvCertBuf, &cbCertSize, false, pCallbacks, pStorage);
     1690                    rc = i_readTarFileToBuf(pTarIo, strCertFile, &pvCertBuf, &cbCertFile, false, pCallbacks, pStorage);
    18501691                    if (FAILED(rc)) throw rc;
    18511692
     
    18721713             * File #N-1 - The manifest file, optional.
    18731714             */
    1874             rc = i_readTarFileToBuf(tar, strMfFile, &pvMfBuf, &cbMfSize, true, pCallbacks, pStorage);
     1715            rc = i_readTarFileToBuf(pTarIo, strMfFile, &pvMfBuf, &cbMfFile, true, pCallbacks, pStorage);
    18751716            if (FAILED(rc)) throw rc;
    18761717
     
    18801721                /* Add the ovf file to the digest list. */
    18811722                stack.llSrcDisksDigest.push_front(STRPAIR(OVFfilename, m->strOVFSHADigest));
    1882                 rc = i_verifyManifestFile(strMfFile, stack, pvMfBuf, cbMfSize);
     1723                rc = i_verifyManifestFile(strMfFile, stack, pvMfBuf, cbMfFile);
    18831724                if (FAILED(rc)) throw rc;
    18841725
     
    18871728                 * (Requires mainfest, as mention before.)
    18881729                 */
    1889 #ifdef USE_RTTAR_FOR_READING
    1890                 RTStrFree(pszFilename);
    1891                 pszFilename = NULL;
    1892                 vrc = RTTarCurrentFile(tar, &pszFilename);
    1893 #else
    18941730                vrc = fssRdOnlyGetCurrentName(pTarIo, &pszFilename);
    1895 #endif
    18961731                if (RT_SUCCESS(vrc))
    18971732                {
    18981733                    if (strCertFile.compare(pszFilename) == 0)
    18991734                    {
    1900                         rc = i_readTarFileToBuf(tar, strCertFile, &pvCertBuf, &cbCertSize, false, pCallbacks, pStorage);
     1735                        rc = i_readTarFileToBuf(pTarIo, strCertFile, &pvCertBuf, &cbCertFile, false, pCallbacks, pStorage);
    19011736                        if (FAILED(rc)) throw rc;
    19021737
     
    19091744            }
    19101745        }
     1746        /** @todo else: Verify the manifest! */
    19111747    }
    19121748    catch (HRESULT rc2)
     
    19211757         * won't be used anymore.
    19221758         */
    1923         {
    1924             ErrorInfoKeeper eik; /* paranoia */
    1925             list< ComObjPtr<VirtualSystemDescription> >::const_iterator itvsd;
    1926             /* Iterate through all virtual systems of that appliance */
    1927             for (itvsd = m->virtualSystemDescriptions.begin();
    1928                  itvsd != m->virtualSystemDescriptions.end();
    1929                  ++itvsd)
    1930             {
    1931                 ComObjPtr<VirtualSystemDescription> vsdescThis = (*itvsd);
    1932                 settings::MachineConfigFile *pConfig = vsdescThis->m->pConfig;
    1933                 if(vsdescThis->m->pConfig!=NULL)
    1934                   stack.restoreOriginalUUIDOfAttachedDevice(pConfig);
    1935             }
     1759        ErrorInfoKeeper eik; /* paranoia */
     1760        list< ComObjPtr<VirtualSystemDescription> >::const_iterator itvsd;
     1761        /* Iterate through all virtual systems of that appliance */
     1762        for (itvsd = m->virtualSystemDescriptions.begin();
     1763             itvsd != m->virtualSystemDescriptions.end();
     1764             ++itvsd)
     1765        {
     1766            ComObjPtr<VirtualSystemDescription> vsdescThis = (*itvsd);
     1767            settings::MachineConfigFile *pConfig = vsdescThis->m->pConfig;
     1768            if(vsdescThis->m->pConfig!=NULL)
     1769              stack.restoreOriginalUUIDOfAttachedDevice(pConfig);
    19361770        }
    19371771    }
    19381772    writeLock.acquire();
    19391773
    1940 #ifdef USE_RTTAR_FOR_READING
    1941     RTTarClose(tar);
    1942 #else
     1774    /* Cleanup */
    19431775    fssRdOnlyDestroyInterface(pTarIo);
    1944 #endif
    1945 
    1946     /* Cleanup */
    1947 #ifdef USE_RTTAR_FOR_READING
    1948     if (pszFilename)
    1949         RTStrFree(pszFilename);
    1950 #endif
    19511776    if (pvMfBuf)
    19521777        RTMemFree(pvMfBuf);
    19531778    if (pShaIo)
    19541779        RTMemFree(pShaIo);
    1955 #ifdef USE_RTTAR_FOR_READING
    1956     if (pTarIo)
    1957         RTMemFree(pTarIo);
    1958 #endif
    19591780    if (pvCertBuf)
    19601781        RTMemFree(pvCertBuf);
     
    21842005}
    21852006
    2186 HRESULT Appliance::i_readTarFileToBuf(
    2187 #ifdef USE_RTTAR_FOR_READING
    2188                                       RTTAR tar,
    2189 #else
    2190                                       PFSSRDONLYINTERFACEIO pTarIo,
    2191 #endif
     2007HRESULT Appliance::i_readTarFileToBuf(PFSSRDONLYINTERFACEIO pTarIo,
    21922008                                      const Utf8Str &strFile,
    21932009                                      void **ppvBuf,
     
    21992015    HRESULT rc = S_OK;
    22002016
    2201 #ifdef USE_RTTAR_FOR_READING
    2202     char *pszCurFile;
    2203     int vrc = RTTarCurrentFile(tar, &pszCurFile);
    2204 #else
    22052017    const char *pszCurFile;
    22062018    int vrc = fssRdOnlyGetCurrentName(pTarIo, &pszCurFile);
    2207 #endif
    22082019    if (RT_SUCCESS(vrc))
    22092020    {
     
    22172028                          tr("Empty directory folder (%s) isn't allowed in the OVA package (%Rrc)"),
    22182029                          pszCurFile, vrc);
    2219 #ifdef USE_RTTAR_FOR_READING
    2220         RTStrFree(pszCurFile);
    2221 #endif
    2222     }
    2223 #ifdef USE_RTTAR_FOR_READING
    2224     else if (vrc != VERR_TAR_END_OF_FILE)
    2225 #else
     2030    }
    22262031    else if (vrc != VERR_EOF)
    2227 #endif
    22282032        rc = setError(VBOX_E_IPRT_ERROR, "Seeking within the archive failed (%Rrc)", vrc);
    22292033
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