VirtualBox

Changeset 72883 in vbox


Ignore:
Timestamp:
Jul 4, 2018 3:22:02 PM (6 years ago)
Author:
vboxsync
Message:

Main/Medium: add API flag for creating formatted floppy images
Frontends/VBoxManage: matching CLI code

Location:
trunk/src/VBox
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageDisk.cpp

    r69500 r72883  
    8484            else if (!RTStrNICmp(psz, "esx", len))
    8585                uMediumVariant |= MediumVariant_VmdkESX;
     86            else if (!RTStrNICmp(psz, "formatted", len))
     87                uMediumVariant |= MediumVariant_Formatted;
    8688            else
    8789                rc = VERR_PARSE_ERROR;
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp

    r72476 r72883  
    966966                     "                            [--diffparent <uuid>|<filename>\n"
    967967                     "                            [--format VDI|VMDK|VHD] (default: VDI)\n"
    968                      "                            [--variant Standard,Fixed,Split2G,Stream,ESX]\n"
     968                     "                            [--variant Standard,Fixed,Split2G,Stream,ESX,\n"
     969                     "                                       Formatted]\n"
    969970                     "\n", SEP);
    970971
  • trunk/src/VBox/Main/idl/VirtualBox.xidl

    r72703 r72883  
    1476214762      </desc>
    1476314763    </const>
     14764    <const name="Formatted"             value="0x20000000">
     14765      <desc>
     14766        Special flag which requests formatting the disk image. Right now
     14767        supported for floppy images only.
     14768      </desc>
     14769    </const>
    1476414770    <const name="NoCreateDir"           value="0x40000000">
    1476514771      <desc>
     
    1585315859      <desc>
    1585415860        Starts creating a hard disk storage unit (fixed/dynamic, according
    15855         to the variant flags) in in the background. The previous storage unit
     15861        to the variant flags) in the background. The previous storage unit
    1585615862        created for this object, if any, must first be deleted using
    1585715863        <link to="#deleteStorage"/>, otherwise the operation will fail.
  • trunk/src/VBox/Main/include/MediumImpl.h

    r72703 r72883  
    220220                        const ComObjPtr<Progress> &aProgress);
    221221
    222     HRESULT i_cloneToEx(const ComObjPtr<Medium> &aTarget, ULONG aVariant,
     222    HRESULT i_cloneToEx(const ComObjPtr<Medium> &aTarget, MediumVariant_T aVariant,
    223223                        const ComObjPtr<Medium> &aParent, IProgress **aProgress,
    224224                        uint32_t idxSrcImageSame, uint32_t idxDstImageSame);
  • trunk/src/VBox/Main/src-server/MachineImplCloneVM.cpp

    r72509 r72883  
    12501250                        srcLock.release();
    12511251                        rc = pLMedium->i_cloneToEx(pTarget,
    1252                                                    srcVar,
     1252                                                   (MediumVariant_T)srcVar,
    12531253                                                   pNewParent,
    12541254                                                   progress2.asOutParam(),
  • trunk/src/VBox/Main/src-server/MediumImpl.cpp

    r72703 r72883  
    3838#include <iprt/memsafer.h>
    3939#include <iprt/base64.h>
     40#include <iprt/vfs.h>
     41#include <iprt/fsvfs.h>
    4042
    4143#include <VBox/vd.h>
     
    25942596                           m->strFormat.c_str());
    25952597
     2598        if (    (mediumVariantFlags & MediumVariant_Formatted)
     2599            &&  i_getDeviceType() != DeviceType_Floppy)
     2600            throw setError(VBOX_E_NOT_SUPPORTED,
     2601                           tr("Medium variant 'formatted' applies to floppy images only"));
     2602
    25962603        if (m->state != MediumState_NotCreated)
    25972604            throw i_setStateError();
     
    26102617        pTask = new Medium::CreateBaseTask(this, pProgress, aLogicalSize,
    26112618                                           (MediumVariant_T)mediumVariantFlags);
    2612                                            //(MediumVariant_T)aVariant);
    26132619        rc = pTask->rc();
    26142620        AssertComRC(rc);
     
    27492755    }
    27502756
     2757    if (mediumVariantFlags & MediumVariant_Formatted)
     2758    {
     2759        delete pMediumLockList;
     2760        return setError(VBOX_E_NOT_SUPPORTED,
     2761                        tr("Medium variant 'formatted' applies to floppy images only"));
     2762    }
     2763
    27512764    rc = i_createDiffStorage(diff, (MediumVariant_T)mediumVariantFlags, pMediumLockList,
    27522765                             &pProgress, false /* aWait */);
     
    29152928            for (size_t i = 0; i < aVariant.size(); i++)
    29162929                mediumVariantFlags |= (ULONG)aVariant[i];
     2930        }
     2931
     2932        if (mediumVariantFlags & MediumVariant_Formatted)
     2933        {
     2934            delete pSourceMediumLockList;
     2935            delete pTargetMediumLockList;
     2936            throw setError(VBOX_E_NOT_SUPPORTED,
     2937                           tr("Medium variant 'formatted' applies to floppy images only"));
    29172938        }
    29182939
     
    62276248                                         false /* fMoveByRename */,
    62286249                                         0 /* cbSize */,
    6229                                          aVariant & ~MediumVariant_NoCreateDir,
     6250                                         aVariant & ~(MediumVariant_NoCreateDir | MediumVariant_Formatted),
    62306251                                         NULL /* pDstUuid */,
    62316252                                         VD_OPEN_FLAGS_NORMAL | VD_OPEN_FLAGS_SEQUENTIAL,
     
    63766397 * @return
    63776398 */
    6378 HRESULT Medium::i_cloneToEx(const ComObjPtr<Medium> &aTarget, ULONG aVariant,
     6399HRESULT Medium::i_cloneToEx(const ComObjPtr<Medium> &aTarget, MediumVariant_T aVariant,
    63796400                            const ComObjPtr<Medium> &aParent, IProgress **aProgress,
    63806401                            uint32_t idxSrcImageSame, uint32_t idxDstImageSame)
     
    64806501
    64816502        /* setup task object to carry out the operation asynchronously */
    6482         pTask = new Medium::CloneTask(this, pProgress, aTarget,
    6483                                       (MediumVariant_T)aVariant,
     6503        pTask = new Medium::CloneTask(this, pProgress, aTarget, aVariant,
    64846504                                      aParent, idxSrcImageSame,
    64856505                                      idxDstImageSame, pSourceMediumLockList,
     
    81878207                               location.c_str(),
    81888208                               task.mSize,
    8189                                task.mVariant & ~MediumVariant_NoCreateDir,
     8209                               task.mVariant & ~(MediumVariant_NoCreateDir | MediumVariant_Formatted),
    81908210                               NULL,
    81918211                               &geo,
     
    82048224                    throw setError(VBOX_E_FILE_ERROR,
    82058225                                   tr("Could not create the medium storage unit '%s'%s"),
     8226                                   location.c_str(), i_vdError(vrc).c_str());
     8227            }
     8228
     8229            if (task.mVariant & MediumVariant_Formatted)
     8230            {
     8231                RTVFSFILE hVfsFile;
     8232                vrc = RTVfsFileOpenNormal(location.c_str(), RTFILE_O_READWRITE | RTFILE_O_OPEN | RTFILE_O_DENY_ALL, &hVfsFile);
     8233                if (RT_FAILURE(vrc))
     8234                    throw setError(VBOX_E_FILE_ERROR,
     8235                                   tr("Opening medium storage unit '%s' failed%s"),
     8236                                   location.c_str(), i_vdError(vrc).c_str());
     8237                vrc = RTFsFatVolFormat(hVfsFile, 0 /* offVol */, 0 /* cbVol */, RTFSFATVOL_FMT_F_QUICK,
     8238                                       0 /* cbSector */, 0 /* cbSectorPerCluster */, RTFSFATTYPE_INVALID,
     8239                                       0 /* cHeads */, 0 /* cSectorsPerTrack*/, 0 /* bMedia */,
     8240                                       0 /* cRootDirEntries */, 0 /* cHiddenSectors */,
     8241                                       NULL /* pErrInfo */);
     8242                RTVfsFileRelease(hVfsFile);
     8243                if (RT_FAILURE(vrc))
     8244                    throw setError(VBOX_E_FILE_ERROR,
     8245                                   tr("Formatting medium storage unit '%s' failed%s"),
    82068246                                   location.c_str(), i_vdError(vrc).c_str());
    82078247            }
     
    83798419                               targetFormat.c_str(),
    83808420                               targetLocation.c_str(),
    8381                                (task.mVariant & ~(MediumVariant_NoCreateDir | MediumVariant_VmdkESX)) | VD_IMAGE_FLAGS_DIFF,
     8421                                 (task.mVariant & ~(MediumVariant_NoCreateDir | MediumVariant_Formatted | MediumVariant_VmdkESX))
     8422                               | VD_IMAGE_FLAGS_DIFF,
    83828423                               NULL,
    83838424                               targetId.raw(),
     
    89759016                                 false /* fMoveByRename */,
    89769017                                 0 /* cbSize */,
    8977                                  task.mVariant & ~MediumVariant_NoCreateDir,
     9018                                 task.mVariant & ~(MediumVariant_NoCreateDir | MediumVariant_Formatted),
    89789019                                 targetId.raw(),
    89799020                                 VD_OPEN_FLAGS_NORMAL | m->uOpenFlagsDef,
     
    89939034                                   task.midxSrcImageSame,
    89949035                                   task.midxDstImageSame,
    8995                                    task.mVariant & ~MediumVariant_NoCreateDir,
     9036                                   task.mVariant & ~(MediumVariant_NoCreateDir | MediumVariant_Formatted),
    89969037                                   targetId.raw(),
    89979038                                   VD_OPEN_FLAGS_NORMAL | m->uOpenFlagsDef,
     
    98649905                             false /* fMoveByRename */,
    98659906                             0 /* cbSize */,
    9866                              task.mVariant & ~MediumVariant_NoCreateDir,
     9907                             task.mVariant & ~(MediumVariant_NoCreateDir | MediumVariant_Formatted),
    98679908                             targetId.raw(),
    98689909                             VD_OPEN_FLAGS_NORMAL,
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