VirtualBox

Changeset 78968 in vbox for trunk/src


Ignore:
Timestamp:
Jun 4, 2019 2:48:23 PM (6 years ago)
Author:
vboxsync
Message:

Main/MachienImplMoveVM.cpp: Some more review comments and a couple of cleanups. bugref:8345

Location:
trunk/src/VBox/Main
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/include/MachineImplMoveVM.h

    r78836 r78968  
    7474        }
    7575
    76         void printItem(bool fLog) const;
     76#ifdef DEBUG
     77        void logItem() const;
     78#endif
    7779
    7880        HRESULT m_code;
     
    138140    HRESULT moveAllDisks(const std::map<Utf8Str, MEDIUMTASKMOVE>& listOfDisks, const Utf8Str* strTargetFolder = NULL);
    139141    HRESULT restoreAllDisks(const std::map<Utf8Str, MEDIUMTASKMOVE>& listOfDisks);
    140     bool isMediumTypeSupportedForMoving(const ComPtr<IMedium> &pMedium);
     142    bool isMediumTypeSupportedForMovingThrowsHresult(const ComPtr<IMedium> &pMedium);
    141143};
    142144
  • trunk/src/VBox/Main/src-server/MachineImplMoveVM.cpp

    r78836 r78968  
    128128
    129129
    130 void MachineMoveVM::ErrorInfoItem::printItem(bool fLog) const
     130#ifdef DEBUG
     131void MachineMoveVM::ErrorInfoItem::logItem() const
    131132{
    132     if (fLog)
    133     {
    134         Log2(("(The error code is %Rrc): %s\n",m_code, m_description.c_str()));
    135     }
    136     else
    137         RTPrintf("(The error code is %Rrc): %s\n",m_code, m_description.c_str());
     133    Log2(("(The error code is %Rrc): %s\n", m_code, m_description.c_str()));
    138134}
     135#endif
    139136
    140137HRESULT MachineMoveVM::init()
     
    149146        size_t len = m_targetPath.length() + 2;
    150147        if (len >= RTPATH_MAX)
    151         {
    152             return m_pMachine->setError(VBOX_E_IPRT_ERROR,
    153                                         m_pMachine->tr(Utf8Str("The destination path exceeds "
    154                                                                "the maximum value.").c_str()));
    155         }
     148            return m_pMachine->setError(VBOX_E_IPRT_ERROR, m_pMachine->tr("The destination path exceeds the maximum value."));
    156149
    157150        /** @todo r=bird: I need to add a Utf8Str method or iprt/cxx/path.h thingy
     
    174167     */
    175168
    176     try
     169    try /** @todo r=bird: What's the point of the try/catch here now? */
    177170    {
    178171        RTFOFF cbTotal = 0;
     
    183176        int vrc = RTFsQuerySizes(strTargetFolder.c_str(), &cbTotal, &cbFree, &cbBlock, &cbSector);
    184177        if (FAILED(vrc))
    185         {
    186             return m_pMachine->setErrorBoth(E_FAIL, vrc,
    187                                             m_pMachine->tr(Utf8StrFmt("Unable to move machine. Can't get "
    188                                                                       "the destination storage size (%s)",
    189                                                                       strTargetFolder.c_str()).c_str()));
    190         }
     178            return m_pMachine->setErrorBoth(VBOX_E_IPRT_ERROR, vrc,
     179                                            m_pMachine->tr("Unable to determine free space at move destination ('%s'): %Rrc"),
     180                                            strTargetFolder.c_str(), vrc);
    191181
    192182        RTDIR hDir;
    193         Utf8Str strTempFile = strTargetFolder + "test.txt";
    194183        vrc = RTDirOpen(&hDir, strTargetFolder.c_str());
    195184        if (RT_FAILURE(vrc))
    196185            return m_pMachine->setErrorVrc(vrc);
    197         else
    198         {
    199             RTFILE hFile;
    200             vrc = RTFileOpen(&hFile, strTempFile.c_str(), RTFILE_O_OPEN_CREATE | RTFILE_O_READWRITE | RTFILE_O_DENY_NONE);
    201             if (RT_FAILURE(vrc))
    202             {
    203                 return m_pMachine->setErrorVrc(vrc,
    204                                                m_pMachine->tr(Utf8StrFmt("Can't create a test file test.txt in the %s. "
    205                                                                          "Check the access rights of the destination "
    206                                                                          "folder.", strTargetFolder.c_str()).c_str()));
    207             }
    208 
    209             /** @todo r=vvp: Do we need to check each return result here? Looks excessively.
    210              *  And it's not so important for the test file. */
    211             RTFileClose(hFile);
    212             RTFileDelete(strTempFile.c_str());
     186
     187        Utf8Str strTempFile = strTargetFolder + "test.txt";
     188        RTFILE hFile;
     189        vrc = RTFileOpen(&hFile, strTempFile.c_str(), RTFILE_O_OPEN_CREATE | RTFILE_O_READWRITE | RTFILE_O_DENY_NONE);
     190        if (RT_FAILURE(vrc))
     191        {
    213192            RTDirClose(hDir);
    214         }
     193            return m_pMachine->setErrorVrc(vrc,
     194                                           m_pMachine->tr("Can't create a test file test.txt in the %s. Check the access rights of the destination folder."),
     195                                           strTargetFolder.c_str());
     196        }
     197
     198        /** @todo r=vvp: Do we need to check each return result here? Looks excessively.
     199         *  And it's not so important for the test file.
     200         * bird: I'd just do AssertRC on the same line, though the deletion
     201         * of the test is a little important. */
     202        vrc = RTFileClose(hFile); AssertRC(vrc);
     203        RTFileDelete(strTempFile.c_str());
     204        vrc = RTDirClose(hDir); AssertRC(vrc);
    215205
    216206        Log2(("blocks: total %RTfoff, free %RTfoff ", cbTotal, cbFree));
     
    221211        vrc = RTFsQueryProperties(strTargetFolder.c_str(), &properties);
    222212        if (FAILED(vrc))
    223             return m_pMachine->setErrorVrc(vrc);
    224 
    225         Utf8StrFmt info ("disk properties:\n"
    226                          "remote: %s \n"
    227                          "read only: %s \n"
    228                          "compressed: %s \n",
    229                          properties.fRemote == true ? "true":"false",
    230                          properties.fReadOnly == true ? "true":"false",
    231                          properties.fCompressed == true ? "true":"false");
    232 
    233         Log2(("%s \n", info.c_str()));
     213            return m_pMachine->setErrorVrc(vrc, "RTFsQueryProperties(%s): %Rrc", strTargetFolder.c_str(), vrc);
     214
     215        Log2(("disk properties:\n"
     216              "remote: %RTbool\n"
     217              "read only: %RTbool\n"
     218              "compressed: %RTbool\n",
     219              properties.fRemote,
     220              properties.fReadOnly,
     221              properties.fCompressed));
    234222
    235223        /* Get the original VM path */
     
    266254        if (   m_type.equals("basic")
    267255            && strLogFolder.contains(strSettingsFilePath))
    268         {
    269256            m_vmFolders.insert(std::make_pair(VBox_LogFolder, strLogFolder));
    270         }
    271257
    272258        Utf8Str strStateFilePath;
     
    275261        hrc = m_pMachine->COMGETTER(State)(&machineState);
    276262        if (FAILED(hrc))
    277              return hrc;
     263            return hrc;
    278264
    279265        if (machineState == MachineState_Saved)
     
    291277        hrc = m_pMachine->COMGETTER(SnapshotFolder)(bstr_snapshotFolder.asOutParam());
    292278        if (FAILED(hrc))
    293              return hrc;
     279            return hrc;
    294280
    295281        strSnapshotFolder = bstr_snapshotFolder;
     
    303289            hrc = m_pMachine->COMGETTER(Id)(bstrSrcMachineId.asOutParam());
    304290            if (FAILED(hrc))
    305                  return hrc;
     291                return hrc;
    306292
    307293            ComPtr<IMachine> newSrcMachine;
    308294            hrc = m_pMachine->i_getVirtualBox()->FindMachine(bstrSrcMachineId.raw(), newSrcMachine.asOutParam());
    309295            if (FAILED(hrc))
    310                  return hrc;
     296                return hrc;
    311297        }
    312298
     
    315301         */
    316302
    317         long long neededFreeSpace = 0;
     303        int64_t neededFreeSpace = 0;
    318304
    319305        /* Actual file list */
     
    329315            hrc = m_pMachine->COMGETTER(SnapshotCount)(&cSnapshots);
    330316            if (FAILED(hrc))
    331                  return hrc;
     317                return hrc;
    332318
    333319            if (cSnapshots > 0)
     
    339325                hrc = m_pMachine->FindSnapshot(Bstr(id).raw(), pSnapshot.asOutParam());
    340326                if (FAILED(hrc))
    341                      return hrc;
     327                    return hrc;
    342328                hrc = createMachineList(pSnapshot, machineList);
    343329                if (FAILED(hrc))
    344                      return hrc;
     330                    return hrc;
    345331            }
    346332        }
     
    352338        hrc = queryMediasForAllStates(machineList);
    353339        if (FAILED(hrc))
    354              return hrc;
    355 
    356         {
     340            return hrc;
     341
     342        { /** @todo r=bird: What're the scopes for?? */
    357343            uint64_t totalMediumsSize = 0;
    358344
    359345            for (size_t i = 0; i < m_llMedias.size(); ++i)
    360346            {
    361                 LONG64  cbSize = 0;
    362347                MEDIUMTASKCHAINMOVE &mtc = m_llMedias.at(i);
    363348                for (size_t a = mtc.chain.size(); a > 0; --a)
    364349                {
    365350                    Bstr bstrLocation;
    366                     Utf8Str strLocation;
    367351                    Utf8Str name = mtc.chain[a - 1].strBaseName;
    368352                    ComPtr<IMedium> plMedium = mtc.chain[a - 1].pMedium;
    369353                    hrc = plMedium->COMGETTER(Location)(bstrLocation.asOutParam());
    370354                    if (FAILED(hrc))
    371                          return hrc;
    372 
    373                     strLocation = bstrLocation;
     355                        return hrc;
     356
     357                    Utf8Str strLocation = bstrLocation;
    374358
    375359                    /*if an image is located in the actual VM folder it will be added to the actual list */
     360                    /** @todo r=bird: This isn't sane wrt unix paths (should
     361                     * be startsWith)... And on windows there is the matter of
     362                     * two kinds of slashes. */
    376363                    if (strLocation.contains(strSettingsFilePath))
    377364                    {
     365                        LONG64 cbSize = 0;
    378366                        hrc = plMedium->COMGETTER(Size)(&cbSize);
    379367                        if (FAILED(hrc))
    380                              return hrc;
     368                            return hrc;
    381369
    382370                        std::pair<std::map<Utf8Str, MEDIUMTASKMOVE>::iterator,bool> ret;
     
    428416                        Log2(("The state file %s wasn't added into the moved list. Couldn't get the file size.\n",
    429417                              name.c_str()));
    430                         return m_pMachine->setErrorVrc(vrc);
     418                        return m_pMachine->setErrorVrc(vrc,
     419                                                       m_pMachine->tr("Failed to get file size for '%s': %Rrc"),
     420                                                       name.c_str(), vrc);
    431421                    }
    432422                }
     
    448438                    neededFreeSpace += totalLogSize;
    449439                    if (cbFree - neededFreeSpace <= _1M)
    450                     {
    451                         return m_pMachine->setError(VBOX_E_IPRT_ERROR,
    452                                                     m_pMachine->tr(Utf8StrFmt("There is lack of disk space "
    453                                                                               "(%Rrc)", VERR_OUT_OF_RESOURCES).c_str()));
    454                     }
     440                        return m_pMachine->setError(E_FAIL,
     441                                                    m_pMachine->tr("Insufficient disk space availble (%RTfoff needed, %RTfoff free)"),
     442                                                    neededFreeSpace, cbFree);
    455443
    456444                    fileList_t filesList;
     
    475463                        }
    476464                        else
    477                             Log2(("The log file %s wasn't added into the moved list. "
    478                                   "Couldn't get the file size.\n", strFile.c_str()));
     465                            Log2(("The log file %s wasn't added into the moved list. Couldn't get the file size.\n", strFile.c_str()));
    479466                        ++it;
    480467                    }
     
    496483            LogRel(("but free space on destination is %RTfoff\n", cbFree));
    497484            return m_pMachine->setError(VBOX_E_IPRT_ERROR,
    498                                         m_pMachine->tr(Utf8StrFmt ("There is lack of disk space"
    499                                                                    " (%Rrc)", VERR_OUT_OF_RESOURCES).c_str()));
     485                                        m_pMachine->tr("Insufficient disk space availble (%RTfoff needed, %RTfoff free)"),
     486                                        neededFreeSpace, cbFree);
    500487        }
    501488
     
    519506                                    1);
    520507            if (FAILED(hrc))
    521             {
    522                 return m_pMachine->setError(VBOX_E_IPRT_ERROR,
    523                                             m_pMachine->tr(Utf8StrFmt("Couldn't correctly setup the progress "
    524                                                                       "object for moving VM operation (%Rrc)", hrc).c_str()));
    525             }
     508                return m_pMachine->setError(hrc,
     509                                            m_pMachine->tr("Couldn't correctly setup the progress object for moving VM operation"));
    526510        }
    527511
     
    693677                if (RT_FAILURE(vrc))
    694678                {
     679                    /** @todo r=bird: tr() cannot translate formatted messages like this!
     680                     * I would suggest you add methods to the task for doing
     681                     * both of these things in one go:
     682                     *  appendAndSetErrorBothV(HRESULT,int,const char *,va_list)
     683                     *  appendAndSetErrorBoth(HRESULT,int,const char *,...)
     684                     *  appendAndSetErrorVrc(int,const char *,...)
     685                     */
     686
    695687                    Utf8StrFmt errorDesc("Could not create snapshots folder '%s' (%Rrc)", strTrgSnapshotFolder.c_str(), vrc);
    696688                    taskMoveVM->m_errorsList.push_back(ErrorInfoItem(VBOX_E_IPRT_ERROR, errorDesc.c_str()));
     
    709701                /* Move to next sub-operation. */
    710702                hrc = taskMoveVM->m_pProgress->SetNextOperation(BstrFmt(machine->tr("Copy the save state file '%s' ..."),
    711                                                             RTPathFilename(sst.strSaveStateFile.c_str())).raw(), sst.uWeight);
     703                                                                        RTPathFilename(sst.strSaveStateFile.c_str())).raw(),
     704                                                                sst.uWeight);
    712705                if (FAILED(hrc))
    713706                    throw hrc;
     
    717710                if (RT_FAILURE(vrc))
    718711                {
     712                    /** @todo r=bird: See first error push_back in MachineMoveVM::i_MoveVMThreadTask */
    719713                    Utf8StrFmt errorDesc("Could not copy state file '%s' to '%s' (%Rrc)",
    720714                                         sst.strSaveStateFile.c_str(), strTrgSaveState.c_str(), vrc);
     
    755749
    756750            hrc = taskMoveVM->m_pProgress->SetNextOperation(BstrFmt(machine->tr("Copy Machine settings file '%s' ..."),
    757                                                 (*machineConfFile).machineUserData.strName.c_str()).raw(), 1);
     751                                                                    (*machineConfFile).machineUserData.strName.c_str()).raw(),
     752                                                            1);
    758753            if (FAILED(hrc))
    759754                throw hrc;
     
    767762                if (RT_FAILURE(vrc))
    768763                {
     764                    /** @todo r=bird: See first error push_back in MachineMoveVM::i_MoveVMThreadTask */
    769765                    Utf8StrFmt errorDesc("Could not create a home machine folder '%s' (%Rrc)",
    770766                                         strTargetSettingsFilePath.c_str(), vrc);
     
    795791            if (RT_FAILURE(vrc))
    796792            {
     793                /** @todo r=bird: See first error push_back in MachineMoveVM::i_MoveVMThreadTask */
    797794                Utf8StrFmt errorDesc("Could not copy the setting file '%s' to '%s' (%Rrc)",
    798795                                     strSettingsFilePath.c_str(), strTargetSettingsFilePath.stripFilename().c_str(), vrc);
     
    802799            }
    803800
    804             Log2(("The setting file %s has been copied into the folder %s\n", strSettingsFilePath.c_str(),
    805                         strTargetSettingsFilePath.stripFilename().c_str()));
     801            Log2(("The setting file %s has been copied into the folder %s\n",
     802                  strSettingsFilePath.c_str(), strTargetSettingsFilePath.stripFilename().c_str()));
    806803
    807804            /* save new file in case of restoring */
     
    813810        /* Moving Machine log files */
    814811        {
    815             Log2(("Copy machine log files \n"));
     812            Log2(("Copy machine log files\n"));
    816813
    817814            if (taskMoveVM->m_vmFolders[VBox_LogFolder].isNotEmpty())
     
    829826                        if (RT_FAILURE(vrc))
    830827                        {
     828                            /** @todo r=bird: See first error push_back in MachineMoveVM::i_MoveVMThreadTask */
    831829                            Utf8StrFmt errorDesc("Could not create log folder '%s' (%Rrc)",
    832830                                                 strTargetLogFolderPath.c_str(), vrc);
     
    851849                        /* Move to next sub-operation. */
    852850                        hrc = taskMoveVM->m_pProgress->SetNextOperation(BstrFmt(machine->tr("Copying the log file '%s' ..."),
    853                                                                                RTPathFilename(strFullSourceFilePath.c_str())).raw(),
     851                                                                                RTPathFilename(strFullSourceFilePath.c_str())).raw(),
    854852                                                                       1);
    855853                        if (FAILED(hrc))
     
    860858                        if (RT_FAILURE(vrc))
    861859                        {
     860                            /** @todo r=bird: See first error push_back in MachineMoveVM::i_MoveVMThreadTask */
    862861                            Utf8StrFmt errorDesc("Could not copy the log file '%s' to '%s' (%Rrc)",
    863862                                                 strFullSourceFilePath.c_str(),
     
    11431142                strTargetImageName.append(RTPATH_DELIMITER).append(strLocation);
    11441143                rc = m_pProgress->SetNextOperation(BstrFmt(machine->tr("Moving medium '%ls' ..."),
    1145                                                        bstrSrcName.raw()).raw(),
    1146                                                        mt.uWeight);
     1144                                                           bstrSrcName.raw()).raw(),
     1145                                                   mt.uWeight);
    11471146                if (FAILED(rc)) throw rc;
    11481147            }
     
    11511150                strTargetImageName = mt.strBaseName;//Should contain full path to the image
    11521151                rc = m_pProgress->SetNextOperation(BstrFmt(machine->tr("Moving medium '%ls' back..."),
    1153                                                        bstrSrcName.raw()).raw(),
    1154                                                        mt.uWeight);
     1152                                                           bstrSrcName.raw()).raw(),
     1153                                                   mt.uWeight);
    11551154                if (FAILED(rc)) throw rc;
    11561155            }
     
    12771276    if (RT_SUCCESS(vrc))
    12781277    {
     1278        /** @todo r=bird: RTDIRENTRY is big and this function is doing
     1279         * unrestrained recursion of arbritrary depth.  Four things:
     1280         *      - Add a depth counter parameter and refuse to go deeper than
     1281         *        a certain reasonable limit.
     1282         *      - Split this method into a main and a worker, placing
     1283         *        RTDIRENTRY on the stack in the main and passing it onto to
     1284         *        worker as a parameter.
     1285         *      - RTDirRead may fail for reasons other than
     1286         *        VERR_NO_MORE_FILES.  For instance someone could create an
     1287         *        entry with a name longer than RTDIRENTRY have space to
     1288         *        store (windows host with UTF-16 encoding shorter than 255
     1289         *        chars, but UTF-8 encoding longer than 260).
     1290         *      - enmType can be RTDIRENTRYTYPE_UNKNOWN if the file system or
     1291         *        the host doesn't return the information.  See
     1292         *        RTDIRENTRY::enmType.  Use RTDirQueryUnknownType() to get the
     1293         *        actual type. */
    12791294        RTDIRENTRY DirEntry;
    12801295        while (RT_SUCCESS(RTDirRead(hDir, &DirEntry, NULL)))
     
    13031318    else if (vrc == VERR_FILE_NOT_FOUND)
    13041319    {
     1320        /** @todo r=bird: See first error push_back in MachineMoveVM::i_MoveVMThreadTask */
    13051321        Utf8StrFmt errorDesc("Folder '%s' doesn't exist (%Rrc)", strRootFolder.c_str(), vrc);
    13061322        m_errorsList.push_back(ErrorInfoItem(VERR_FILE_NOT_FOUND, errorDesc.c_str()));
     
    13101326    else
    13111327    {
     1328        /** @todo r=bird: See first error push_back in MachineMoveVM::i_MoveVMThreadTask */
    13121329        Utf8StrFmt errorDesc("Could not open folder '%s' (%Rrc)", strRootFolder.c_str(), vrc);
    13131330        m_errorsList.push_back(ErrorInfoItem(VBOX_E_IPRT_ERROR, errorDesc.c_str()));
     
    13341351            if (RT_FAILURE(vrc))
    13351352            {
     1353                /** @todo r=bird: See first error push_back in MachineMoveVM::i_MoveVMThreadTask */
    13361354                Utf8StrFmt errorDesc("Could not delete file '%s' (%Rrc)", listOfFiles.at(i).c_str(), hrc);
    13371355                m_errorsList.push_back(ErrorInfoItem(VBOX_E_IPRT_ERROR, errorDesc.c_str()));
     
    13431361        }
    13441362    }
    1345     catch(HRESULT aRc)
     1363    catch (HRESULT aRc)  /** @todo r=bird: Pointless as you do nada beyond this point, so just return instead of throw hrc above! */
    13461364    {
    13471365        hrc = aRc;
    13481366    }
    1349     catch (...)
     1367    catch (...) /** @todo appendAndSetErrorXxxx could make this unnecessary too! */
    13501368    {
    13511369        hrc = VirtualBoxBase::handleUnexpectedExceptions(m_pMachine, RT_SRC_POS);
     
    13811399                else
    13821400                {
    1383                     Utf8StrFmt errorDesc("Could not get the size of file '%s' (%Rrc)", fullPath.c_str(), vrc);
     1401                    /** @todo r=bird: See first error push_back in MachineMoveVM::i_MoveVMThreadTask */
     1402                    Utf8StrFmt errorDesc("Could not get the size of file '%s': %Rrc", fullPath.c_str(), vrc);
    13841403                    m_errorsList.push_back(ErrorInfoItem(VBOX_E_IPRT_ERROR, errorDesc.c_str()));
    13851404
     
    14131432                                         std::vector< ComObjPtr<Machine> > &aMachineList) const
    14141433{
    1415     HRESULT rc = S_OK;
    14161434    Bstr name;
    1417     rc = pSnapshot->COMGETTER(Name)(name.asOutParam());
     1435    HRESULT rc = pSnapshot->COMGETTER(Name)(name.asOutParam());
    14181436    if (FAILED(rc)) return rc;
    14191437
     
    14751493            try
    14761494            {
    1477                 bool fPass = isMediumTypeSupportedForMoving(pMedium);
    1478                 if(!fPass)
     1495                bool fPass = isMediumTypeSupportedForMovingThrowsHresult(pMedium);
     1496                if (!fPass)
    14791497                {
    1480                     Log2(("Skipping file %s because of this medium type hasn't been supported for moving.\n",
    1481                           Utf8Str(bstrLocation.raw()).c_str()));
     1498                    Log2(("Skipping file %ls because of this medium type hasn't been supported for moving.\n",
     1499                          bstrLocation.raw()));
    14821500                    continue;
    14831501                }
    1484             } catch (HRESULT aRc)
     1502            }
     1503            catch (HRESULT aRc)
    14851504            {
    14861505                return aRc;
     
    15121531                MEDIUMTASKMOVE mt;// = {false, "basename", NULL, 0, 0};
    15131532                mt.strBaseName = bstrLocation;
    1514                 Utf8Str strFolder = m_vmFolders[VBox_SnapshotFolder];
    1515                 if (strFolder.isNotEmpty() && mt.strBaseName.contains(strFolder))
    1516                 {
     1533                Utf8Str const &strFolder = m_vmFolders[VBox_SnapshotFolder];
     1534                if (strFolder.isNotEmpty() && mt.strBaseName.contains(strFolder)) /** @todo r=bird: contains? Shouldn't it be startsWith and take mixed slashes (windows) and stuff into account? */
    15171535                    mt.fSnapshot = true;
    1518                 }
    15191536                else
    15201537                    mt.fSnapshot = false;
     
    15671584        if (RT_FAILURE(vrc))
    15681585        {
     1586            /** @todo r=bird: See first error push_back in MachineMoveVM::i_MoveVMThreadTask */
    15691587            Utf8StrFmt errorDesc("Could not get file size of '%s' (%Rrc)", sst.strSaveStateFile.c_str(), vrc);
    15701588            m_errorsList.push_back(ErrorInfoItem(VBOX_E_IPRT_ERROR, errorDesc.c_str()));
     
    16051623}
    16061624
    1607 bool MachineMoveVM::isMediumTypeSupportedForMoving(const ComPtr<IMedium> &pMedium)
     1625/** @todo r=bird: An option better than throwing stuff here would be to use S_OK
     1626 *        for true, S_FALSE for false and other values for errors.
     1627 *        UnattendedImpl.cpp and others does this. */
     1628bool MachineMoveVM::isMediumTypeSupportedForMovingThrowsHresult(const ComPtr<IMedium> &pMedium)
    16081629{
    1609     HRESULT rc = S_OK;
     1630    HRESULT rc = S_OK; /** @todo r=bird: This mess with my brain.  Assigning S_OK and then first use is receiving the return
     1631                        * value of a call.  That's plain copy&past lazyness and deliberate code obfuscation. */
    16101632    bool fSupported = true;
    16111633    Bstr bstrLocation;
     
    16131635    if (FAILED(rc))
    16141636    {
    1615         fSupported = false;
     1637        fSupported = false; /** @todo r=bird: Why waste time setting fSupport here?? */
    16161638        throw rc;
    16171639    }
     
    16461668    {
    16471669        Log2(("Skipping medium %s. VHDX format is supported in \"read-only\" mode only. \n",
    1648               Utf8Str(bstrLocation.raw()).c_str()));
    1649         fSupported = false;
     1670              Utf8Str(bstrLocation.raw()).c_str())); /** @todo r=bird: You should log UTF-16 string directly using \%ls. */
     1671        fSupported = false; /** @todo return immediately? */
    16501672    }
    16511673
     
    16681690
    16691691        //only ISO image is moved. Otherwise adding some information into log file
     1692        /** @todo r=bird: Log2 is only doing debug logging, so perhaps LogRel()
     1693         *        here or fix the comment. */
    16701694        bool fIso = ext.endsWith(".iso", Utf8Str::CaseInsensitive);
    16711695        if (fIso == false)
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