Changeset 37024 in vbox for trunk/src/VBox/Runtime/common/dvm/dvmgpt.cpp
- Timestamp:
- May 10, 2011 11:23:44 AM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 71639
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/common/dvm/dvmgpt.cpp
r36868 r37024 25 25 */ 26 26 27 28 /******************************************************************************* 29 * Header Files * 30 *******************************************************************************/ 27 31 #include <iprt/types.h> 28 32 #include <iprt/assert.h> … … 33 37 #include "internal/dvm.h" 34 38 39 40 /******************************************************************************* 41 * Structures and Typedefs * 42 *******************************************************************************/ 35 43 /** The GPT signature. */ 36 44 #define RTDVM_GPT_SIGNATURE "EFI PART" … … 178 186 #define RTDVM_GPT_BYTE2LBA(lba, disk) ((lba) / (disk)->cbSector) 179 187 188 189 /******************************************************************************* 190 * Global Variables * 191 *******************************************************************************/ 180 192 /** 181 193 * Mapping of partition types to DVM volume types. … … 216 228 }; 217 229 218 DECLCALLBACK(int) dvmFmtGptProbe(PCRTDVMDISK pDisk, uint32_t *puScore)230 static DECLCALLBACK(int) rtDvmFmtGptProbe(PCRTDVMDISK pDisk, uint32_t *puScore) 219 231 { 220 232 int rc = VINF_SUCCESS; … … 223 235 *puScore = RTDVM_MATCH_SCORE_UNSUPPORTED; 224 236 225 if ( dvmDiskGetSectors(pDisk) >= 2)237 if (rtDvmDiskGetSectors(pDisk) >= 2) 226 238 { 227 239 /* Read from the disk and check for the signature. */ 228 rc = dvmDiskRead(pDisk, RTDVM_GPT_LBA2BYTE(1, pDisk), &Hdr, sizeof(GptHdr));240 rc = rtDvmDiskRead(pDisk, RTDVM_GPT_LBA2BYTE(1, pDisk), &Hdr, sizeof(GptHdr)); 229 241 if ( RT_SUCCESS(rc) 230 242 && !strncmp(&Hdr.abSignature[0], RTDVM_GPT_SIGNATURE, RT_ELEMENTS(Hdr.abSignature)) … … 237 249 } 238 250 239 DECLCALLBACK(int) dvmFmtGptOpen(PCRTDVMDISK pDisk, PRTDVMFMT phVolMgrFmt)251 static DECLCALLBACK(int) rtDvmFmtGptOpen(PCRTDVMDISK pDisk, PRTDVMFMT phVolMgrFmt) 240 252 { 241 253 int rc = VINF_SUCCESS; … … 249 261 250 262 /* Read the complete GPT header and convert to host endianess. */ 251 rc = dvmDiskRead(pDisk, RTDVM_GPT_LBA2BYTE(1, pDisk), &pThis->HdrRev1, sizeof(pThis->HdrRev1));263 rc = rtDvmDiskRead(pDisk, RTDVM_GPT_LBA2BYTE(1, pDisk), &pThis->HdrRev1, sizeof(pThis->HdrRev1)); 252 264 if (RT_SUCCESS(rc)) 253 265 { … … 270 282 if (VALID_PTR(pThis->paGptEntries)) 271 283 { 272 rc = dvmDiskRead(pDisk, RTDVM_GPT_LBA2BYTE(pThis->HdrRev1.u64LbaPartitionEntries, pDisk),284 rc = rtDvmDiskRead(pDisk, RTDVM_GPT_LBA2BYTE(pThis->HdrRev1.u64LbaPartitionEntries, pDisk), 273 285 pThis->paGptEntries, pThis->HdrRev1.cPartitionEntries * pThis->HdrRev1.cbPartitionEntry); 274 286 if (RT_SUCCESS(rc)) … … 311 323 } 312 324 313 DECLCALLBACK(int) dvmFmtGptInitialize(PCRTDVMDISK pDisk, PRTDVMFMT phVolMgrFmt)325 static DECLCALLBACK(int) rtDvmFmtGptInitialize(PCRTDVMDISK pDisk, PRTDVMFMT phVolMgrFmt) 314 326 { 315 327 return VERR_NOT_IMPLEMENTED; 316 328 } 317 329 318 DECLCALLBACK(void) dvmFmtGptClose(RTDVMFMT hVolMgrFmt)330 static DECLCALLBACK(void) rtDvmFmtGptClose(RTDVMFMT hVolMgrFmt) 319 331 { 320 332 PRTDVMFMTINTERNAL pThis = hVolMgrFmt; … … 328 340 } 329 341 330 DECLCALLBACK(uint32_t) dvmFmtGptGetValidVolumes(RTDVMFMT hVolMgrFmt)342 static DECLCALLBACK(uint32_t) rtDvmFmtGptGetValidVolumes(RTDVMFMT hVolMgrFmt) 331 343 { 332 344 PRTDVMFMTINTERNAL pThis = hVolMgrFmt; … … 335 347 } 336 348 337 DECLCALLBACK(uint32_t) dvmFmtGptGetMaxVolumes(RTDVMFMT hVolMgrFmt)349 static DECLCALLBACK(uint32_t) rtDvmFmtGptGetMaxVolumes(RTDVMFMT hVolMgrFmt) 338 350 { 339 351 PRTDVMFMTINTERNAL pThis = hVolMgrFmt; … … 351 363 * @param phVolFmt Where to store the volume data on success. 352 364 */ 353 static int dvmFmtMbrVolumeCreate(PRTDVMFMTINTERNAL pThis, PGptEntry pGptEntry,365 static int rtDvmFmtMbrVolumeCreate(PRTDVMFMTINTERNAL pThis, PGptEntry pGptEntry, 354 366 uint32_t idx, PRTDVMVOLUMEFMT phVolFmt) 355 367 { … … 373 385 } 374 386 375 DECLCALLBACK(int) dvmFmtGptQueryFirstVolume(RTDVMFMT hVolMgrFmt, PRTDVMVOLUMEFMT phVolFmt)387 static DECLCALLBACK(int) rtDvmFmtGptQueryFirstVolume(RTDVMFMT hVolMgrFmt, PRTDVMVOLUMEFMT phVolFmt) 376 388 { 377 389 int rc = VINF_SUCCESS; … … 387 399 if (!RTUuidIsNull(&pGptEntry->UuidType)) 388 400 { 389 rc = dvmFmtMbrVolumeCreate(pThis, pGptEntry, i, phVolFmt);401 rc = rtDvmFmtMbrVolumeCreate(pThis, pGptEntry, i, phVolFmt); 390 402 break; 391 403 } … … 399 411 } 400 412 401 DECLCALLBACK(int) dvmFmtGptQueryNextVolume(RTDVMFMT hVolMgrFmt, RTDVMVOLUMEFMT hVolFmt, PRTDVMVOLUMEFMT phVolFmtNext)413 static DECLCALLBACK(int) rtDvmFmtGptQueryNextVolume(RTDVMFMT hVolMgrFmt, RTDVMVOLUMEFMT hVolFmt, PRTDVMVOLUMEFMT phVolFmtNext) 402 414 { 403 415 int rc = VERR_DVM_MAP_NO_VOLUME; … … 410 422 if (!RTUuidIsNull(&pGptEntry->UuidType)) 411 423 { 412 rc = dvmFmtMbrVolumeCreate(pThis, pGptEntry, i, phVolFmtNext);424 rc = rtDvmFmtMbrVolumeCreate(pThis, pGptEntry, i, phVolFmtNext); 413 425 break; 414 426 } … … 419 431 } 420 432 421 DECLCALLBACK(void) dvmFmtGptVolumeClose(RTDVMVOLUMEFMT hVolFmt)433 static DECLCALLBACK(void) rtDvmFmtGptVolumeClose(RTDVMVOLUMEFMT hVolFmt) 422 434 { 423 435 PRTDVMVOLUMEFMTINTERNAL pVol = hVolFmt; … … 431 443 } 432 444 433 DECLCALLBACK(uint64_t) dvmFmtGptVolumeGetSize(RTDVMVOLUMEFMT hVolFmt)445 static DECLCALLBACK(uint64_t) rtDvmFmtGptVolumeGetSize(RTDVMVOLUMEFMT hVolFmt) 434 446 { 435 447 PRTDVMVOLUMEFMTINTERNAL pVol = hVolFmt; … … 438 450 } 439 451 440 DECLCALLBACK(int) dvmFmtGptVolumeQueryName(RTDVMVOLUMEFMT hVolFmt, char **ppszVolName)452 static DECLCALLBACK(int) rtDvmFmtGptVolumeQueryName(RTDVMVOLUMEFMT hVolFmt, char **ppszVolName) 441 453 { 442 454 PRTDVMVOLUMEFMTINTERNAL pVol = hVolFmt; … … 450 462 } 451 463 452 DECLCALLBACK(RTDVMVOLTYPE) dvmFmtGptVolumeGetType(RTDVMVOLUMEFMT hVolFmt)464 static DECLCALLBACK(RTDVMVOLTYPE) rtDvmFmtGptVolumeGetType(RTDVMVOLUMEFMT hVolFmt) 453 465 { 454 466 RTDVMVOLTYPE enmVolType = RTDVMVOLTYPE_UNKNOWN; … … 465 477 } 466 478 467 DECLCALLBACK(uint64_t) dvmFmtGptVolumeGetFlags(RTDVMVOLUMEFMT hVolFmt)479 static DECLCALLBACK(uint64_t) rtDvmFmtGptVolumeGetFlags(RTDVMVOLUMEFMT hVolFmt) 468 480 { 469 481 NOREF(hVolFmt); /* No supported flags for now. */ … … 471 483 } 472 484 473 DECLCALLBACK(int) dvmFmtGptVolumeRead(RTDVMVOLUMEFMT hVolFmt, uint64_t off, void *pvBuf, size_t cbRead)485 static DECLCALLBACK(int) rtDvmFmtGptVolumeRead(RTDVMVOLUMEFMT hVolFmt, uint64_t off, void *pvBuf, size_t cbRead) 474 486 { 475 487 PRTDVMVOLUMEFMTINTERNAL pVol = hVolFmt; 476 488 AssertReturn(off + cbRead <= pVol->cbVolume, VERR_INVALID_PARAMETER); 477 489 478 return dvmDiskRead(pVol->pVolMgr->pDisk, pVol->offStart + off, pvBuf, cbRead);479 } 480 481 DECLCALLBACK(int) dvmFmtGptVolumeWrite(RTDVMVOLUMEFMT hVolFmt, uint64_t off, const void *pvBuf, size_t cbWrite)490 return rtDvmDiskRead(pVol->pVolMgr->pDisk, pVol->offStart + off, pvBuf, cbRead); 491 } 492 493 static DECLCALLBACK(int) rtDvmFmtGptVolumeWrite(RTDVMVOLUMEFMT hVolFmt, uint64_t off, const void *pvBuf, size_t cbWrite) 482 494 { 483 495 PRTDVMVOLUMEFMTINTERNAL pVol = hVolFmt; 484 496 AssertReturn(off + cbWrite <= pVol->cbVolume, VERR_INVALID_PARAMETER); 485 497 486 return dvmDiskWrite(pVol->pVolMgr->pDisk, pVol->offStart + off, pvBuf, cbWrite);487 } 488 489 RTDVMFMTOPS g_ DvmFmtGpt =498 return rtDvmDiskWrite(pVol->pVolMgr->pDisk, pVol->offStart + off, pvBuf, cbWrite); 499 } 500 501 RTDVMFMTOPS g_rtDvmFmtGpt = 490 502 { 491 503 /* pcszFmt */ 492 504 "GPT", 493 505 /* pfnProbe */ 494 dvmFmtGptProbe,506 rtDvmFmtGptProbe, 495 507 /* pfnOpen */ 496 dvmFmtGptOpen,508 rtDvmFmtGptOpen, 497 509 /* pfnInitialize */ 498 dvmFmtGptInitialize,510 rtDvmFmtGptInitialize, 499 511 /* pfnClose */ 500 dvmFmtGptClose,512 rtDvmFmtGptClose, 501 513 /* pfnGetValidVolumes */ 502 dvmFmtGptGetValidVolumes,514 rtDvmFmtGptGetValidVolumes, 503 515 /* pfnGetMaxVolumes */ 504 dvmFmtGptGetMaxVolumes,516 rtDvmFmtGptGetMaxVolumes, 505 517 /* pfnQueryFirstVolume */ 506 dvmFmtGptQueryFirstVolume,518 rtDvmFmtGptQueryFirstVolume, 507 519 /* pfnQueryNextVolume */ 508 dvmFmtGptQueryNextVolume,520 rtDvmFmtGptQueryNextVolume, 509 521 /* pfnVolumeClose */ 510 dvmFmtGptVolumeClose,522 rtDvmFmtGptVolumeClose, 511 523 /* pfnVolumeGetSize */ 512 dvmFmtGptVolumeGetSize,524 rtDvmFmtGptVolumeGetSize, 513 525 /* pfnVolumeQueryName */ 514 dvmFmtGptVolumeQueryName,526 rtDvmFmtGptVolumeQueryName, 515 527 /* pfnVolumeGetType */ 516 dvmFmtGptVolumeGetType,528 rtDvmFmtGptVolumeGetType, 517 529 /* pfnVolumeGetFlags */ 518 dvmFmtGptVolumeGetFlags,530 rtDvmFmtGptVolumeGetFlags, 519 531 /* pfnVolumeRead */ 520 dvmFmtGptVolumeRead,532 rtDvmFmtGptVolumeRead, 521 533 /* pfnVolumeWrite */ 522 dvmFmtGptVolumeWrite534 rtDvmFmtGptVolumeWrite 523 535 }; 524 536
Note:
See TracChangeset
for help on using the changeset viewer.