Changeset 33643 in vbox
- Timestamp:
- Nov 1, 2010 11:34:30 AM (14 years ago)
- File:
-
- 1 edited
-
trunk/src/VBox/Main/ApplianceImplIO.cpp (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/ApplianceImplIO.cpp
r33567 r33643 439 439 PRTTARSTORAGEINTERNAL pInt = (PRTTARSTORAGEINTERNAL)pvStorage; 440 440 441 DEBUG_PRINT_FLOW();441 // DEBUG_PRINT_FLOW(); 442 442 443 443 return RTTarFileReadAt(pInt->file, uOffset, pvBuf, cbRead, pcbRead); … … 1055 1055 AssertPtrReturn(pCallbacks, VERR_INVALID_PARAMETER); 1056 1056 1057 DEBUG_PRINT_FLOW();1057 // DEBUG_PRINT_FLOW(); 1058 1058 1059 1059 PSHA1STORAGEINTERNAL pInt = (PSHA1STORAGEINTERNAL)pvStorage; … … 1082 1082 if ( cbAvail == 0 1083 1083 && pInt->fEOF) 1084 return VERR_EOF; 1084 { 1085 break; 1086 } 1085 1087 /* If there isn't enough data make sure the worker thread is fetching 1086 1088 * more. */ … … 1111 1113 RTCircBufReleaseReadBlock(pInt->pCircBuf, cbMemRead); 1112 1114 cbAllRead += cbMemRead; 1115 1113 1116 pInt->cbCurAll += cbMemRead; 1114 1117 } … … 1239 1242 return rc; 1240 1243 1244 void *pvTmpBuf = 0; 1241 1245 void *pvBuf = 0; 1242 uint64_t cbSize = 0; 1246 uint64_t cbTmpSize = _1M; 1247 size_t cbAllRead = 0; 1243 1248 do 1244 1249 { 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) 1251 1252 { 1252 1253 rc = VERR_NO_MEMORY; … … 1254 1255 } 1255 1256 1256 size_t cbAllRead = 0;1257 1257 for(;;) 1258 1258 { 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) 1260 1263 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; 1265 1268 break; 1269 } 1270 memcpy(&((char*)pvBuf)[cbAllRead], pvTmpBuf, cbRead); 1266 1271 cbAllRead += cbRead; 1267 1272 } … … 1270 1275 pCallbacks->pfnClose(pvUser, pvStorage); 1271 1276 1277 if (rc == VERR_EOF) 1278 rc = VINF_SUCCESS; 1279 1280 if (pvTmpBuf) 1281 RTMemFree(pvTmpBuf); 1282 1272 1283 if (RT_SUCCESS(rc)) 1273 1284 { 1274 1285 *ppvBuf = pvBuf; 1275 *pcbSize = cb Size;1286 *pcbSize = cbAllRead; 1276 1287 }else 1277 1288 {
Note:
See TracChangeset
for help on using the changeset viewer.

