VirtualBox

Ignore:
Timestamp:
Mar 7, 2018 11:20:00 AM (7 years ago)
Author:
vboxsync
Message:

Guest Control/[Directory|File]CopyFrom: Factored out the fileCopyFrom session task routines to also implement copying entire directories from the guest within Main. Work in progress.

File:
1 edited

Legend:

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

    r71231 r71251  
    219219        }
    220220
    221         const char* GetSource() const
    222         {
    223             return mSource.c_str();
    224         }
    225 
    226         const char* GetFilter() const
    227         {
    228             return mFilter.c_str();
     221        Utf8Str GetSource() const
     222        {
     223            return mSource;
     224        }
     225
     226        Utf8Str GetFilter() const
     227        {
     228            return mFilter;
    229229        }
    230230
     
    17671767    RTGetOptInit(&GetState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions), 1, RTGETOPTINIT_FLAGS_OPTS_FIRST);
    17681768
    1769     Utf8Str strSource;
    17701769    const char *pszDst = NULL;
    17711770    bool fDryRun = false;
     
    18531852    for (unsigned long s = 0; s < vecSources.size(); s++)
    18541853    {
    1855         char *pszSrc = RTStrDup(vecSources[s].GetSource());
    1856         AssertPtrBreakStmt(pszSrc, vrc = VERR_NO_MEMORY);
    1857         const char *pszFilter = vecSources[s].GetFilter();
    1858         RT_NOREF(pszFilter);
    1859         /* pszFilter can be NULL if not set. */
     1854        Utf8Str strSrc    = vecSources[s].GetSource();
     1855        Utf8Str strFilter = vecSources[s].GetFilter();
     1856        RT_NOREF(strFilter);
     1857        /* strFilter can be NULL if not set. */
    18601858
    18611859        if (fHostToGuest)
    18621860        {
    1863             if (RTFileExists(pszSrc))
     1861            if (RTFileExists(strSrc.c_str()))
    18641862            {
    18651863                SafeArray<FileCopyFlag_T> copyFlags;
    1866                 rc = pCtx->pGuestSession->FileCopyToGuest(Bstr(pszSrc).raw(), Bstr(pszDst).raw(),
     1864                rc = pCtx->pGuestSession->FileCopyToGuest(Bstr(strSrc).raw(), Bstr(pszDst).raw(),
    18671865                                                          ComSafeArrayAsInParam(copyFlags), pProgress.asOutParam());
    18681866            }
    1869             else if (RTDirExists(pszSrc))
     1867            else if (RTDirExists(strSrc.c_str()))
    18701868            {
    18711869                SafeArray<DirectoryCopyFlag_T> copyFlags;
    18721870                copyFlags.push_back(DirectoryCopyFlag_CopyIntoExisting);
    1873                 rc = pCtx->pGuestSession->DirectoryCopyToGuest(Bstr(pszSrc).raw(), Bstr(pszDst).raw(),
     1871                rc = pCtx->pGuestSession->DirectoryCopyToGuest(Bstr(strSrc).raw(), Bstr(pszDst).raw(),
    18741872                                                               ComSafeArrayAsInParam(copyFlags), pProgress.asOutParam());
    18751873            }
    18761874            else if (pCtx->cVerbose)
    1877                 RTPrintf("Warning: \"%s\" does not exist or is not a file/directory, skipping ...\n", pszSrc);
     1875                RTPrintf("Warning: \"%s\" does not exist or is not a file/directory, skipping ...\n", strSrc.c_str());
    18781876        }
    18791877        else
    18801878        {
    1881             SafeArray<FileCopyFlag_T> copyFlags;
    1882             rc = pCtx->pGuestSession->FileCopyFromGuest(Bstr(pszSrc).raw(), Bstr(pszDst).raw(),
    1883                                                         ComSafeArrayAsInParam(copyFlags), pProgress.asOutParam());
     1879            if (   strSrc.endsWith("/")
     1880                || strSrc.endsWith("\\"))
     1881            {
     1882                SafeArray<DirectoryCopyFlag_T> copyFlags;
     1883                copyFlags.push_back(DirectoryCopyFlag_CopyIntoExisting);
     1884                rc = pCtx->pGuestSession->DirectoryCopyFromGuest(Bstr(strSrc).raw(), Bstr(pszDst).raw(),
     1885                                                                 ComSafeArrayAsInParam(copyFlags), pProgress.asOutParam());
     1886            }
     1887            else
     1888            {
     1889                SafeArray<FileCopyFlag_T> copyFlags;
     1890                rc = pCtx->pGuestSession->FileCopyFromGuest(Bstr(strSrc).raw(), Bstr(pszDst).raw(),
     1891                                                            ComSafeArrayAsInParam(copyFlags), pProgress.asOutParam());
     1892            }
    18841893        }
    18851894    }
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