VirtualBox

Changeset 33643 in vbox


Ignore:
Timestamp:
Nov 1, 2010 11:34:30 AM (14 years ago)
Author:
vboxsync
Message:

Main-OVF: streamify Sha1ReadBuf

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/ApplianceImplIO.cpp

    r33567 r33643  
    439439    PRTTARSTORAGEINTERNAL pInt = (PRTTARSTORAGEINTERNAL)pvStorage;
    440440
    441     DEBUG_PRINT_FLOW();
     441//    DEBUG_PRINT_FLOW();
    442442
    443443    return RTTarFileReadAt(pInt->file, uOffset, pvBuf, cbRead, pcbRead);
     
    10551055    AssertPtrReturn(pCallbacks, VERR_INVALID_PARAMETER);
    10561056
    1057     DEBUG_PRINT_FLOW();
     1057//    DEBUG_PRINT_FLOW();
    10581058
    10591059    PSHA1STORAGEINTERNAL pInt = (PSHA1STORAGEINTERNAL)pvStorage;
     
    10821082        if (   cbAvail == 0
    10831083            && pInt->fEOF)
    1084             return VERR_EOF;
     1084        {
     1085            break;
     1086        }
    10851087        /* If there isn't enough data make sure the worker thread is fetching
    10861088         * more. */
     
    11111113        RTCircBufReleaseReadBlock(pInt->pCircBuf, cbMemRead);
    11121114        cbAllRead += cbMemRead;
     1115
    11131116        pInt->cbCurAll += cbMemRead;
    11141117    }
     
    12391242        return rc;
    12401243
     1244    void *pvTmpBuf = 0;
    12411245    void *pvBuf = 0;
    1242     uint64_t cbSize = 0;
     1246    uint64_t cbTmpSize = _1M;
     1247    size_t cbAllRead = 0;
    12431248    do
    12441249    {
    1245         rc = pCallbacks->pfnGetSize(pvUser, pvStorage, &cbSize);
    1246         if (RT_FAILURE(rc))
    1247             break;
    1248 
    1249         pvBuf = RTMemAlloc(cbSize);
    1250         if (!pvBuf)
     1250        pvTmpBuf = RTMemAlloc(cbTmpSize);
     1251        if (!pvTmpBuf)
    12511252        {
    12521253            rc = VERR_NO_MEMORY;
     
    12541255        }
    12551256
    1256         size_t cbAllRead = 0;
    12571257        for(;;)
    12581258        {
    1259             if (cbAllRead == cbSize)
     1259            size_t cbRead = 0;
     1260            rc = pCallbacks->pfnReadSync(pvUser, pvStorage, cbAllRead, pvTmpBuf, cbTmpSize, &cbRead);
     1261            if (   RT_FAILURE(rc)
     1262                || cbRead == 0)
    12601263                break;
    1261             size_t cbToRead = cbSize - cbAllRead;
    1262             size_t cbRead = 0;
    1263             rc = pCallbacks->pfnReadSync(pvUser, pvStorage, cbAllRead, &((char*)pvBuf)[cbAllRead], cbToRead, &cbRead);
    1264             if (RT_FAILURE(rc))
     1264            pvBuf = RTMemRealloc(pvBuf, cbAllRead + cbRead);
     1265            if (!pvBuf)
     1266            {
     1267                rc = VERR_NO_MEMORY;
    12651268                break;
     1269            }
     1270            memcpy(&((char*)pvBuf)[cbAllRead], pvTmpBuf, cbRead);
    12661271            cbAllRead += cbRead;
    12671272        }
     
    12701275    pCallbacks->pfnClose(pvUser, pvStorage);
    12711276
     1277    if (rc == VERR_EOF)
     1278        rc = VINF_SUCCESS;
     1279
     1280    if (pvTmpBuf)
     1281        RTMemFree(pvTmpBuf);
     1282
    12721283    if (RT_SUCCESS(rc))
    12731284    {
    12741285        *ppvBuf = pvBuf;
    1275         *pcbSize = cbSize;
     1286        *pcbSize = cbAllRead;
    12761287    }else
    12771288    {
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