Changeset 66486 in vbox for trunk/src/VBox/Storage/QCOW.cpp
- Timestamp:
- Apr 10, 2017 7:23:59 AM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 114481
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Storage/QCOW.cpp
r66110 r66486 251 251 * (can be only one at a time). */ 252 252 PQCOWL2CACHEENTRY pL2TblAlloc; 253 253 /** The static region list. */ 254 VDREGIONLIST RegionList; 254 255 } QCOWIMAGE, *PQCOWIMAGE; 255 256 … … 1227 1228 pImage->pszFilename); 1228 1229 1229 if (RT_FAILURE(rc)) 1230 if (RT_SUCCESS(rc)) 1231 { 1232 PVDREGIONDESC pRegion = &pImage->RegionList.aRegions[0]; 1233 pImage->RegionList.fFlags = 0; 1234 pImage->RegionList.cRegions = 1; 1235 1236 pRegion->offRegion = 0; /* Disk start. */ 1237 pRegion->cbBlock = 512; 1238 pRegion->enmDataForm = VDREGIONDATAFORM_RAW; 1239 pRegion->enmMetadataForm = VDREGIONMETADATAFORM_NONE; 1240 pRegion->cbData = 512; 1241 pRegion->cbMetadata = 0; 1242 pRegion->cRegionBlocksOrBytes = pImage->cbSize; 1243 } 1244 else 1230 1245 qcowFreeImage(pImage, false); 1231 1246 return rc; … … 1308 1323 vdIfProgress(pIfProgress, uPercentStart + uPercentSpan); 1309 1324 1310 if (RT_FAILURE(rc)) 1325 if (RT_SUCCESS(rc)) 1326 { 1327 PVDREGIONDESC pRegion = &pImage->RegionList.aRegions[0]; 1328 pImage->RegionList.fFlags = 0; 1329 pImage->RegionList.cRegions = 1; 1330 1331 pRegion->offRegion = 0; /* Disk start. */ 1332 pRegion->cbBlock = 512; 1333 pRegion->enmDataForm = VDREGIONDATAFORM_RAW; 1334 pRegion->enmMetadataForm = VDREGIONMETADATAFORM_NONE; 1335 pRegion->cbData = 512; 1336 pRegion->cbMetadata = 0; 1337 pRegion->cRegionBlocksOrBytes = pImage->cbSize; 1338 } 1339 else 1311 1340 qcowFreeImage(pImage, rc != VERR_ALREADY_EXISTS); 1312 1341 return rc; … … 1528 1557 AssertReturn((VALID_PTR(pszFilename) && *pszFilename), VERR_INVALID_PARAMETER); 1529 1558 1530 PQCOWIMAGE pImage = (PQCOWIMAGE)RTMemAllocZ( sizeof(QCOWIMAGE));1559 PQCOWIMAGE pImage = (PQCOWIMAGE)RTMemAllocZ(RT_UOFFSETOF(QCOWIMAGE, RegionList.aRegions[1])); 1531 1560 if (RT_LIKELY(pImage)) 1532 1561 { … … 1575 1604 && VALID_PTR(pLCHSGeometry), VERR_INVALID_PARAMETER); 1576 1605 1577 PQCOWIMAGE pImage = (PQCOWIMAGE)RTMemAllocZ( sizeof(QCOWIMAGE));1606 PQCOWIMAGE pImage = (PQCOWIMAGE)RTMemAllocZ(RT_UOFFSETOF(QCOWIMAGE, RegionList.aRegions[1])); 1578 1607 if (RT_LIKELY(pImage)) 1579 1608 { … … 1918 1947 } 1919 1948 1920 /** @copydoc VDIMAGEBACKEND::pfnGetSectorSize */1921 static DECLCALLBACK(uint32_t) qcowGetSectorSize(void *pBackendData)1922 {1923 LogFlowFunc(("pBackendData=%#p\n", pBackendData));1924 PQCOWIMAGE pImage = (PQCOWIMAGE)pBackendData;1925 uint32_t cb = 0;1926 1927 AssertPtrReturn(pImage, 0);1928 1929 if (pImage->pStorage)1930 cb = 512;1931 1932 LogFlowFunc(("returns %u\n", cb));1933 return cb;1934 }1935 1936 /** @copydoc VDIMAGEBACKEND::pfnGetSize */1937 static DECLCALLBACK(uint64_t) qcowGetSize(void *pBackendData)1938 {1939 LogFlowFunc(("pBackendData=%#p\n", pBackendData));1940 PQCOWIMAGE pImage = (PQCOWIMAGE)pBackendData;1941 uint64_t cb = 0;1942 1943 AssertPtrReturn(pImage, 0);1944 1945 if (pImage->pStorage)1946 cb = pImage->cbSize;1947 1948 LogFlowFunc(("returns %llu\n", cb));1949 return cb;1950 }1951 1952 1949 /** @copydoc VDIMAGEBACKEND::pfnGetFileSize */ 1953 1950 static DECLCALLBACK(uint64_t) qcowGetFileSize(void *pBackendData) … … 2044 2041 LogFlowFunc(("returns %Rrc\n", rc)); 2045 2042 return rc; 2043 } 2044 2045 /** @copydoc VDIMAGEBACKEND::pfnQueryRegions */ 2046 static DECLCALLBACK(int) qcowQueryRegions(void *pBackendData, PCVDREGIONLIST *ppRegionList) 2047 { 2048 LogFlowFunc(("pBackendData=%#p ppRegionList=%#p\n", pBackendData, ppRegionList)); 2049 PQCOWIMAGE pThis = (PQCOWIMAGE)pBackendData; 2050 2051 AssertPtrReturn(pThis, VERR_VD_NOT_OPENED); 2052 2053 *ppRegionList = &pThis->RegionList; 2054 LogFlowFunc(("returns %Rrc\n", VINF_SUCCESS)); 2055 return VINF_SUCCESS; 2056 } 2057 2058 /** @copydoc VDIMAGEBACKEND::pfnRegionListRelease */ 2059 static DECLCALLBACK(void) qcowRegionListRelease(void *pBackendData, PCVDREGIONLIST pRegionList) 2060 { 2061 RT_NOREF1(pRegionList); 2062 LogFlowFunc(("pBackendData=%#p pRegionList=%#p\n", pBackendData, pRegionList)); 2063 PQCOWIMAGE pThis = (PQCOWIMAGE)pBackendData; 2064 AssertPtr(pThis); RT_NOREF(pThis); 2065 2066 /* Nothing to do here. */ 2046 2067 } 2047 2068 … … 2369 2390 /* pfnGetVersion */ 2370 2391 qcowGetVersion, 2371 /* pfnGetSectorSize */2372 qcowGetSectorSize,2373 /* pfnGetSize */2374 qcowGetSize,2375 2392 /* pfnGetFileSize */ 2376 2393 qcowGetFileSize, … … 2384 2401 qcowSetLCHSGeometry, 2385 2402 /* pfnQueryRegions */ 2386 NULL,2403 qcowQueryRegions, 2387 2404 /* pfnRegionListRelease */ 2388 NULL,2405 qcowRegionListRelease, 2389 2406 /* pfnGetImageFlags */ 2390 2407 qcowGetImageFlags,
Note:
See TracChangeset
for help on using the changeset viewer.