VirtualBox

Changeset 33224 in vbox for trunk/src/VBox/Devices/Storage


Ignore:
Timestamp:
Oct 19, 2010 8:11:46 AM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
66769
Message:

Storage/vbox-img: fix reading from pipes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Storage/testcase/vbox-img.cpp

    r33213 r33224  
    363363    if (pFS->offBuffer == UINT64_MAX)
    364364    {
    365         size_t cbRead = 0;
    366         rc = RTFileRead(0, &pFS->abBuffer[0], sizeof(pFS->abBuffer),
    367                         &cbRead);
    368         if (RT_FAILURE(rc))
    369             return rc;
     365        /* Repeat reading until buffer is full or EOF. */
     366        size_t cbSumRead = 0, cbRead;
     367        uint8_t *pTmp = (uint8_t *)&pFS->abBuffer[0];
     368        size_t cbTmp = sizeof(pFS->abBuffer);
     369        do
     370        {
     371            rc = RTFileRead(0, pTmp, cbTmp, &cbRead);
     372            if (RT_FAILURE(rc))
     373                return rc;
     374            pTmp += cbRead;
     375            cbTmp -= cbRead;
     376            cbSumRead += cbRead;
     377        } while (cbTmp && cbRead);
    370378
    371379        pFS->offBuffer = 0;
    372         pFS->cbBuffer = cbRead;
     380        pFS->cbBuffer = cbSumRead;
    373381    }
    374382
     
    387395            }
    388396
    389             size_t cbRead = 0;
    390             rc = RTFileRead(0, &pFS->abBuffer[0], sizeof(pFS->abBuffer),
    391                             &cbRead);
    392             if (RT_FAILURE(rc))
     397            /* Repeat reading until buffer is full or EOF. */
     398            size_t cbSumRead = 0, cbRead;
     399            uint8_t *pTmp = (uint8_t *)&pFS->abBuffer[0];
     400            size_t cbTmp = sizeof(pFS->abBuffer);
     401            do
    393402            {
    394                 if (pcbRead)
    395                     *pcbRead = cbTotalRead;
    396                 return rc;
    397             }
     403                rc = RTFileRead(0, pTmp, cbTmp, &cbRead);
     404                if (RT_FAILURE(rc))
     405                    return rc;
     406                pTmp += cbRead;
     407                cbTmp -= cbRead;
     408                cbSumRead += cbRead;
     409            } while (cbTmp && cbRead);
    398410
    399411            pFS->offBuffer += pFS->cbBuffer;
    400             pFS->cbBuffer = cbRead;
     412            pFS->cbBuffer = cbSumRead;
    401413        }
    402414
     
    413425    if (pcbRead)
    414426        *pcbRead = cbTotalRead;
     427
     428    pFS->off = uOffset;
    415429
    416430    return VINF_SUCCESS;
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