Changeset 44365 in vbox
- Timestamp:
- Jan 25, 2013 10:24:45 AM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 83334
- Location:
- trunk/src/VBox
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VBoxManage/VBoxManageDisk.cpp
r44039 r44365 373 373 { 374 374 ComPtr<IProgress> progress; 375 com::SafeArray<MediumVariant_T> l_variants(sizeof(MediumVariant_T)*8); 376 377 for (unsigned int i = 0; i < l_variants.size(); ++i) 378 { 379 MediumVariant_T temp = DiskVariant; 380 l_variants [i] = (temp & (1<<i)); 381 } 382 375 383 if (fBase) 376 CHECK_ERROR(hardDisk, CreateBaseStorage(size, DiskVariant, progress.asOutParam()));384 CHECK_ERROR(hardDisk, CreateBaseStorage(size, ComSafeArrayAsInParam(l_variants), progress.asOutParam())); 377 385 else 378 CHECK_ERROR(parentHardDisk, CreateDiffStorage(hardDisk, DiskVariant, progress.asOutParam()));386 CHECK_ERROR(parentHardDisk, CreateDiffStorage(hardDisk, ComSafeArrayAsInParam(l_variants), progress.asOutParam())); 379 387 if (SUCCEEDED(rc) && progress) 380 388 { … … 677 685 678 686 ComPtr<IProgress> progress; 679 CHECK_ERROR_BREAK(srcDisk, CloneTo(dstDisk, DiskVariant, NULL, progress.asOutParam())); 687 com::SafeArray<MediumVariant_T> l_variants(sizeof(MediumVariant_T)*8); 688 689 for (unsigned int i = 0; i < l_variants.size(); ++i) 690 { 691 MediumVariant_T temp = DiskVariant; 692 l_variants [i] = (temp & (1<<i)); 693 } 694 695 CHECK_ERROR_BREAK(srcDisk, CloneTo(dstDisk, ComSafeArrayAsInParam(l_variants), NULL, progress.asOutParam())); 680 696 681 697 rc = showProgress(progress); … … 1001 1017 hardDisk->COMGETTER(Format)(format.asOutParam()); 1002 1018 RTPrintf("Storage format: %ls\n", format.raw()); 1003 ULONG variant; 1004 hardDisk->COMGETTER(Variant)(&variant); 1019 1020 com::SafeArray<MediumVariant_T> safeArray_variant; 1021 1022 hardDisk->COMGETTER(Variant)(ComSafeArrayAsOutParam(safeArray_variant)); 1023 ULONG variant=0; 1024 for (size_t i = 0; i < safeArray_variant.size(); i++) 1025 variant |= safeArray_variant[i]; 1026 1005 1027 const char *variantStr = "unknown"; 1006 1028 switch (variant & ~(MediumVariant_Fixed | MediumVariant_Diff)) -
trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMedium.cpp
r44113 r44365 142 142 mHardDiskFormat = mMedium.GetFormat(); 143 143 mHardDiskType = vboxGlobal().mediumTypeString (mMedium); 144 mStorageDetails = gpConverter->toString((KMediumVariant)mMedium.GetVariant()); 144 145 QVector<KMediumVariant> mediumVariants_QVector = mMedium.GetVariant(); 146 qlonglong mediumVariants_qlonglong = 0; 147 for (int i = 0; i < mediumVariants_QVector.size(); i++) 148 mediumVariants_qlonglong |= mediumVariants_QVector[i]; 149 150 mStorageDetails = gpConverter->toString((KMediumVariant)mediumVariants_qlonglong); 145 151 mIsReadOnly = mMedium.GetReadOnly(); 146 152 -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVD.cpp
r41587 r44365 71 71 } 72 72 73 QVector<KMediumVariant> l_variants(sizeof(uVariant)*8); 74 75 for (int i = 0; i < l_variants.size(); ++i) 76 { 77 qulonglong temp = uVariant; 78 l_variants [i] = (KMediumVariant)(temp & (1<<i)); 79 } 80 73 81 /* Copy existing virtual-disk to the new virtual-disk: */ 74 progress = sourceVirtualDisk.CloneTo(virtualDisk, uVariant, CMedium());82 progress = sourceVirtualDisk.CloneTo(virtualDisk, l_variants, CMedium()); 75 83 if (!virtualDisk.isOk()) 76 84 { -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVD.cpp
r41615 r44365 74 74 } 75 75 76 QVector<KMediumVariant> l_variants(sizeof(qulonglong)*8); 77 78 for (int i = 0; i < l_variants.size(); ++i) 79 { 80 qulonglong temp = uVariant; 81 l_variants [i] = (KMediumVariant)(temp & (1<<i)); 82 } 83 76 84 /* Create base storage for the new hard disk: */ 77 progress = virtualDisk.CreateBaseStorage(uSize, uVariant); 85 progress = virtualDisk.CreateBaseStorage(uSize, l_variants); 86 78 87 if (!virtualDisk.isOk()) 79 88 { -
trunk/src/VBox/Main/idl/VirtualBox.xidl
r44340 r44365 12039 12039 <interface 12040 12040 name="IMedium" extends="$unknown" 12041 uuid=" 29989373-b111-4654-8493-2e1176cba890"12041 uuid="86fd6208-4c8c-40c2-a4e3-f6b47ac6ef07" 12042 12042 wsmap="managed" 12043 12043 > … … 12244 12244 </attribute> 12245 12245 12246 <attribute name="variant" type=" unsigned long" readonly="yes">12246 <attribute name="variant" type="MediumVariant" safearray="yes" readonly="yes"> 12247 12247 <desc> 12248 12248 Returns the storage format variant information for this medium … … 12955 12955 <desc>Maximum logical size of the medium in bytes.</desc> 12956 12956 </param> 12957 <param name="variant" type=" unsigned long" dir="in">12957 <param name="variant" type="MediumVariant" safearray="yes" dir="in"> 12958 12958 <desc>Exact image variant which should be created (as a combination of 12959 12959 <link to="MediumVariant" /> flags).</desc> … … 13038 13038 <desc>Target medium.</desc> 13039 13039 </param> 13040 <param name="variant" type=" unsigned long" dir="in">13040 <param name="variant" type="MediumVariant" safearray="yes" dir="in"> 13041 13041 <desc>Exact image variant which should be created (as a combination of 13042 13042 <link to="MediumVariant" /> flags).</desc> … … 13166 13166 <desc>Target medium.</desc> 13167 13167 </param> 13168 <param name="variant" type=" unsigned long" dir="in">13168 <param name="variant" type="MediumVariant" safearray="yes" dir="in"> 13169 13169 <desc>Exact image variant which should be created (as a combination of 13170 13170 <link to="MediumVariant" /> flags).</desc> … … 13215 13215 <desc>Target medium.</desc> 13216 13216 </param> 13217 <param name="variant" type="unsigned long" dir="in"> 13218 <desc>Exact image variant which should be created (as a combination of 13219 <link to="MediumVariant" /> flags).</desc> 13217 <param name="variant" type="MediumVariant" safearray="yes" dir="in"> 13218 <desc><link to="MediumVariant" /> flags).</desc> 13220 13219 </param> 13221 13220 <param name="progress" type="IProgress" dir="return"> -
trunk/src/VBox/Main/include/MediumImpl.h
r42551 r44365 104 104 STDMETHOD(COMSETTER(Description))(IN_BSTR aDescription); 105 105 STDMETHOD(COMGETTER(State))(MediumState_T *aState); 106 STDMETHOD(COMGETTER(Variant))( ULONG *aVariant);106 STDMETHOD(COMGETTER(Variant))(ComSafeArrayOut(MediumVariant_T, aVariant)); 107 107 STDMETHOD(COMGETTER(Location))(BSTR *aLocation); 108 108 STDMETHOD(COMSETTER(Location))(IN_BSTR aLocation); … … 145 145 ComSafeArrayIn(IN_BSTR, aValues)); 146 146 STDMETHOD(CreateBaseStorage)(LONG64 aLogicalSize, 147 ULONG aVariant,147 ComSafeArrayIn(MediumVariant_T, aVariant), 148 148 IProgress **aProgress); 149 149 STDMETHOD(DeleteStorage)(IProgress **aProgress); 150 150 STDMETHOD(CreateDiffStorage)(IMedium *aTarget, 151 ULONG aVariant,151 ComSafeArrayIn(MediumVariant_T, aVariant), 152 152 IProgress **aProgress); 153 153 STDMETHOD(MergeTo)(IMedium *aTarget, IProgress **aProgress); 154 STDMETHOD(CloneTo)(IMedium *aTarget, ULONG aVariant,154 STDMETHOD(CloneTo)(IMedium *aTarget, ComSafeArrayIn(MediumVariant_T, aVariant), 155 155 IMedium *aParent, IProgress **aProgress); 156 STDMETHOD(CloneToBase)(IMedium *aTarget, ULONG aVariant,156 STDMETHOD(CloneToBase)(IMedium *aTarget, ComSafeArrayIn(MediumVariant_T, aVariant), 157 157 IProgress **aProgress); 158 158 STDMETHOD(Compact)(IProgress **aProgress); -
trunk/src/VBox/Main/src-server/ApplianceImplImport.cpp
r44039 r44365 1870 1870 if (strSourceOVF.isEmpty()) 1871 1871 { 1872 com::SafeArray<MediumVariant_T> mediumVariant; 1873 mediumVariant.push_back(MediumVariant_Standard); 1872 1874 /* Create a dynamic growing disk image with the given capacity. */ 1873 rc = pTargetHD->CreateBaseStorage(di.iCapacity / _1M, MediumVariant_Standard, ComPtr<IProgress>(pProgress).asOutParam());1875 rc = pTargetHD->CreateBaseStorage(di.iCapacity / _1M, ComSafeArrayAsInParam(mediumVariant), ComPtr<IProgress>(pProgress).asOutParam()); 1874 1876 if (FAILED(rc)) throw rc; 1875 1877 -
trunk/src/VBox/Main/src-server/MachineImplCloneVM.cpp
r44091 r44365 1097 1097 p->mParent->getDefaultHardDiskFormat(strDefaultFormat); 1098 1098 Bstr bstrSrcFormat(strDefaultFormat); 1099 1099 1100 ULONG srcVar = MediumVariant_Standard; 1101 com::SafeArray <MediumVariant_T> mediumVariant; 1102 1100 1103 /* Is the source file based? */ 1101 1104 if ((uSrcCaps & MediumFormatCapabilities_File) == MediumFormatCapabilities_File) … … 1105 1108 rc = pMedium->COMGETTER(Format)(bstrSrcFormat.asOutParam()); 1106 1109 if (FAILED(rc)) throw rc; 1107 rc = pMedium->COMGETTER(Variant)(&srcVar); 1110 1111 rc = pMedium->COMGETTER(Variant)(ComSafeArrayAsOutParam(mediumVariant)); 1108 1112 if (FAILED(rc)) throw rc; 1113 else 1114 { 1115 for (size_t i = 0; i < mediumVariant.size(); i++) 1116 srcVar |= mediumVariant[i]; 1117 } 1109 1118 } 1110 1119 -
trunk/src/VBox/Main/src-server/MediumImpl.cpp
r44320 r44365 1532 1532 } 1533 1533 1534 STDMETHODIMP Medium::COMGETTER(Variant)( ULONG *aVariant)1535 { 1536 CheckComArgOut PointerValid(aVariant);1534 STDMETHODIMP Medium::COMGETTER(Variant)(ComSafeArrayOut(MediumVariant_T, aVariant)) 1535 { 1536 CheckComArgOutSafeArrayPointerValid(aVariant); 1537 1537 1538 1538 AutoCaller autoCaller(this); … … 1540 1540 1541 1541 AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS); 1542 *aVariant = m->variant; 1542 1543 SafeArray<MediumVariant_T> variants(sizeof(MediumVariant_T)*8); 1544 1545 for (unsigned int i = 0; i < variants.size(); ++i) 1546 { 1547 MediumVariant_T temp = m->variant; 1548 variants [i] = (temp & (1<<i)); 1549 } 1550 1551 variants.detachTo(ComSafeArrayOutArg(aVariant)); 1543 1552 1544 1553 return S_OK; 1545 1554 } 1546 1547 1555 1548 1556 STDMETHODIMP Medium::COMGETTER(Location)(BSTR *aLocation) … … 2493 2501 2494 2502 STDMETHODIMP Medium::CreateBaseStorage(LONG64 aLogicalSize, 2495 ULONG aVariant,2503 ComSafeArrayIn(MediumVariant_T, aVariant), 2496 2504 IProgress **aProgress) 2497 2505 { 2506 CheckComArgSafeArrayNotNull(aVariant); 2498 2507 CheckComArgOutPointerValid(aProgress); 2499 2508 if (aLogicalSize < 0) … … 2511 2520 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); 2512 2521 2513 aVariant = (MediumVariant_T)((unsigned)aVariant & (unsigned)~MediumVariant_Diff); 2514 if ( !(aVariant & MediumVariant_Fixed) 2522 ULONG mediumVariantFlags = 0; 2523 2524 if (aVariant) 2525 { 2526 com::SafeArray<MediumVariant_T> variants(ComSafeArrayInArg(aVariant)); 2527 for (size_t i = 0; i < variants.size(); i++) 2528 mediumVariantFlags |= variants[i]; 2529 } 2530 2531 mediumVariantFlags &= ((unsigned)~MediumVariant_Diff); 2532 2533 if ( !(mediumVariantFlags & MediumVariant_Fixed) 2515 2534 && !(m->formatObj->getCapabilities() & MediumFormatCapabilities_CreateDynamic)) 2516 2535 throw setError(VBOX_E_NOT_SUPPORTED, 2517 2536 tr("Medium format '%s' does not support dynamic storage creation"), 2518 2537 m->strFormat.c_str()); 2519 if ( (aVariant & MediumVariant_Fixed) 2538 2539 if ( (mediumVariantFlags & MediumVariant_Fixed) 2520 2540 && !(m->formatObj->getCapabilities() & MediumFormatCapabilities_CreateDynamic)) 2521 2541 throw setError(VBOX_E_NOT_SUPPORTED, … … 2529 2549 rc = pProgress->init(m->pVirtualBox, 2530 2550 static_cast<IMedium*>(this), 2531 ( aVariant& MediumVariant_Fixed)2551 (mediumVariantFlags & MediumVariant_Fixed) 2532 2552 ? BstrFmt(tr("Creating fixed medium storage unit '%s'"), m->strLocationFull.c_str()).raw() 2533 2553 : BstrFmt(tr("Creating dynamic medium storage unit '%s'"), m->strLocationFull.c_str()).raw(), … … 2538 2558 /* setup task object to carry out the operation asynchronously */ 2539 2559 pTask = new Medium::CreateBaseTask(this, pProgress, aLogicalSize, 2540 (MediumVariant_T)aVariant); 2560 (MediumVariant_T)mediumVariantFlags); 2561 //(MediumVariant_T)aVariant); 2541 2562 rc = pTask->rc(); 2542 2563 AssertComRC(rc); … … 2582 2603 2583 2604 STDMETHODIMP Medium::CreateDiffStorage(IMedium *aTarget, 2584 ULONG aVariant,2585 IProgress **aProgress)2605 ComSafeArrayIn(MediumVariant_T, aVariant), 2606 IProgress **aProgress) 2586 2607 { 2587 2608 CheckComArgNotNull(aTarget); 2588 2609 CheckComArgOutPointerValid(aProgress); 2610 CheckComArgSafeArrayNotNull(aVariant); 2589 2611 2590 2612 AutoCaller autoCaller(this); … … 2649 2671 ComObjPtr <Progress> pProgress; 2650 2672 2651 rc = createDiffStorage(diff, (MediumVariant_T)aVariant, pMediumLockList, 2673 ULONG mediumVariantFlags = 0; 2674 2675 if (aVariant) 2676 { 2677 com::SafeArray<MediumVariant_T> variants(ComSafeArrayInArg(aVariant)); 2678 for (size_t i = 0; i < variants.size(); i++) 2679 mediumVariantFlags |= variants[i]; 2680 } 2681 2682 rc = createDiffStorage(diff, (MediumVariant_T)mediumVariantFlags, pMediumLockList, 2652 2683 &pProgress, false /* aWait */); 2653 2684 if (FAILED(rc)) … … 2694 2725 2695 2726 STDMETHODIMP Medium::CloneToBase(IMedium *aTarget, 2696 ULONG aVariant,2697 IProgress **aProgress)2727 ComSafeArrayIn(MediumVariant_T, aVariant), 2728 IProgress **aProgress) 2698 2729 { 2699 2730 int rc = S_OK; 2700 2731 CheckComArgNotNull(aTarget); 2701 2732 CheckComArgOutPointerValid(aProgress); 2702 rc = CloneTo(aTarget, aVariant, NULL, aProgress); 2733 CheckComArgSafeArrayNotNull(aVariant); 2734 2735 com::SafeArray<MediumVariant_T> variants(ComSafeArrayInArg(aVariant)); 2736 2737 rc = CloneTo(aTarget, ComSafeArrayAsInParam(variants), NULL, aProgress); 2703 2738 return rc; 2704 2739 } 2705 2740 2706 2741 STDMETHODIMP Medium::CloneTo(IMedium *aTarget, 2707 ULONG aVariant,2742 ComSafeArrayIn(MediumVariant_T, aVariant), 2708 2743 IMedium *aParent, 2709 2744 IProgress **aProgress) … … 2711 2746 CheckComArgNotNull(aTarget); 2712 2747 CheckComArgOutPointerValid(aProgress); 2748 CheckComArgSafeArrayNotNull(aVariant); 2749 2713 2750 ComAssertRet(aTarget != this, E_INVALIDARG); 2714 2751 … … 2808 2845 } 2809 2846 2847 ULONG mediumVariantFlags = 0; 2848 2849 if (aVariant) 2850 { 2851 com::SafeArray<MediumVariant_T> variants(ComSafeArrayInArg(aVariant)); 2852 for (size_t i = 0; i < variants.size(); i++) 2853 mediumVariantFlags |= variants[i]; 2854 } 2855 2810 2856 /* setup task object to carry out the operation asynchronously */ 2811 2857 pTask = new Medium::CloneTask(this, pProgress, pTarget, 2812 (MediumVariant_T) aVariant,2858 (MediumVariant_T)mediumVariantFlags, 2813 2859 pParent, UINT32_MAX, UINT32_MAX, 2814 2860 pSourceMediumLockList, pTargetMediumLockList);
Note:
See TracChangeset
for help on using the changeset viewer.