VirtualBox

Changeset 84864 in vbox


Ignore:
Timestamp:
Jun 17, 2020 2:10:06 PM (5 years ago)
Author:
vboxsync
Message:

Guest Control/Main: Various fixes for copyFromGuest tasks. bugref:9320

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-client/GuestSessionImplTasks.cpp

    r84650 r84864  
    381381    }
    382382
    383     BYTE byBuf[_64K];
     383    BYTE byBuf[_64K]; /** @todo Can we do better here? */
    384384    while (cbToRead)
    385385    {
     
    404404        }
    405405
    406         Assert(cbToRead >= cbRead);
     406        AssertBreak(cbToRead >= cbRead);
    407407        cbToRead -= cbRead;
    408408
    409409        /* Update total bytes written to the guest. */
    410410        cbWrittenTotal += cbRead;
    411         Assert(cbWrittenTotal <= cbSize);
     411        AssertBreak(cbWrittenTotal <= cbSize);
    412412
    413413        /* Did the user cancel the operation above? */
     
    465465int GuestSessionTask::fileCopyFromGuest(const Utf8Str &strSrc, const Utf8Str &strDst, FileCopyFlag_T fFileCopyFlags)
    466466{
    467     LogFlowThisFunc(("strSource=%s, strDest=%s, enmFileCopyFlags=0x%x\n", strSrc.c_str(), strDst.c_str(), fFileCopyFlags));
     467    LogFlowThisFunc(("strSource=%s, strDest=%s, enmFileCopyFlags=%#x\n", strSrc.c_str(), strDst.c_str(), fFileCopyFlags));
    468468
    469469    GuestFileOpenInfo srcOpenInfo;
     
    506506            default:
    507507                setProgressErrorMsg(VBOX_E_IPRT_ERROR,
    508                                     Utf8StrFmt(GuestSession::tr("Guest object \"%s\" is not a file"), strSrc.c_str()));
     508                                    Utf8StrFmt(GuestSession::tr("Guest object \"%s\" is not a file (is type %#x)"),
     509                                               strSrc.c_str(), srcObjData.mType));
    509510                rc = VERR_NOT_A_FILE;
    510511                break;
     
    529530        return rc;
    530531
    531     char *pszDstFile = NULL;
    532532    RTFSOBJINFO dstObjInfo;
    533533    RT_ZERO(dstObjInfo);
     
    553553                if (RTTimeSpecCompare(&srcModificationTimeTS, &dstObjInfo.ModificationTime) <= 0)
    554554                {
    555                     setProgressErrorMsg(VBOX_E_IPRT_ERROR,
    556                                         Utf8StrFmt(GuestSession::tr("Host file \"%s\" has same or newer modification date"),
    557                                                    strDst.c_str()));
     555                    LogRel2(("Guest Control: Host file \"%s\" has same or newer modification date, skipping", strDst.c_str()));
    558556                    fSkip = true;
    559557                }
     
    576574    }
    577575
     576    char *pszDstFile = NULL;
     577
    578578    if (RT_SUCCESS(rc))
    579579    {
     
    593593            /* Build the final file name with destination path (on the host). */
    594594            char szDstPath[RTPATH_MAX];
    595             RTStrPrintf2(szDstPath, sizeof(szDstPath), "%s", strDst.c_str());
    596 
    597             if (   !strDst.endsWith("\\")
    598                 && !strDst.endsWith("/"))
    599                 RTPathAppend(szDstPath, sizeof(szDstPath), "/"); /* IPRT can handle / on all hosts. */
    600 
    601             RTPathAppend(szDstPath, sizeof(szDstPath), RTPathFilenameEx(strSrc.c_str(), mfPathStyle));
    602 
    603             pszDstFile = RTStrDup(szDstPath);
     595            rc = RTStrCopy(szDstPath, sizeof(szDstPath), strDst.c_str());
     596            if (RT_SUCCESS(rc))
     597            {
     598                rc = RTPathAppend(szDstPath, sizeof(szDstPath), RTPathFilenameEx(strSrc.c_str(), mfPathStyle));
     599                if (RT_SUCCESS(rc))
     600                    pszDstFile = RTStrDup(szDstPath);
     601            }
    604602        }
    605603        else if (RTFS_IS_SYMLINK(dstObjInfo.Attr.fMode))
     
    629627        if (!pszDstFile)
    630628        {
    631             setProgressErrorMsg(VBOX_E_IPRT_ERROR, Utf8StrFmt(GuestSession::tr("No memory to allocate destination file path")));
     629            setProgressErrorMsg(VBOX_E_IPRT_ERROR, Utf8StrFmt(GuestSession::tr("No memory to allocate host file path")));
    632630            rc = VERR_NO_MEMORY;
    633631        }
     
    14081406    if (mDest.isEmpty())
    14091407    {
    1410         strErrorInfo = Utf8StrFmt(GuestSession::tr("Destination must not be empty"));
     1408        strErrorInfo = Utf8StrFmt(GuestSession::tr("Host destination must not be empty"));
    14111409        vrc = VERR_INVALID_PARAMETER;
    14121410    }
     
    14231421            if (strSrc.isEmpty())
    14241422            {
    1425                 strErrorInfo = Utf8StrFmt(GuestSession::tr("Source entry must not be empty"));
     1423                strErrorInfo = Utf8StrFmt(GuestSession::tr("Guest source entry must not be empty"));
    14261424                vrc = VERR_INVALID_PARAMETER;
    14271425                break;
     
    14561454            if (RT_FAILURE(vrc))
    14571455            {
    1458                 strErrorInfo = Utf8StrFmt(GuestSession::tr("No such source file/directory: %s"), strSrc.c_str());
     1456                if (vrc == VERR_GSTCTL_GUEST_ERROR)
     1457                    strErrorInfo = GuestBase::getErrorAsString(GuestSession::tr("Guest file lookup failed"),
     1458                                                               GuestErrorInfo(GuestErrorInfo::Type_ToolStat, rcGuest, strSrc.c_str()));
     1459                else
     1460                    strErrorInfo = Utf8StrFmt(GuestSession::tr("Guest file lookup for \"%s\" failed: %Rrc"),
     1461                                              strSrc.c_str(), vrc);
    14591462                break;
    14601463            }
     
    14641467                if (itSrc->enmType != FsObjType_Directory)
    14651468                {
    1466                     strErrorInfo = Utf8StrFmt(GuestSession::tr("Source is not a file: %s"), strSrc.c_str());
     1469                    strErrorInfo = Utf8StrFmt(GuestSession::tr("Guest source is not a file: %s"), strSrc.c_str());
    14671470                    vrc = VERR_NOT_A_FILE;
    14681471                    break;
     
    14731476                if (itSrc->enmType != FsObjType_File)
    14741477                {
    1475                     strErrorInfo = Utf8StrFmt(GuestSession::tr("Source is not a directory: %s"), strSrc.c_str());
     1478                    strErrorInfo = Utf8StrFmt(GuestSession::tr("Guest source is not a directory: %s"), strSrc.c_str());
    14761479                    vrc = VERR_NOT_A_DIRECTORY;
    14771480                    break;
     
    14951498                {
    14961499                    delete pFsList;
    1497                     strErrorInfo = Utf8StrFmt(GuestSession::tr("Error adding source '%s' to list: %Rrc"), strSrc.c_str(), vrc);
     1500                    strErrorInfo = Utf8StrFmt(GuestSession::tr("Error adding guest source '%s' to list: %Rrc"),
     1501                                              strSrc.c_str(), vrc);
    14981502                    break;
    14991503                }
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