VirtualBox

Ignore:
Timestamp:
Jul 10, 2015 6:09:14 AM (9 years ago)
Author:
vboxsync
Message:

DnD: Changed DnDURIList's allocation scheme for stored DnDURIObject objects.

File:
1 edited

Legend:

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

    r56657 r56909  
    756756}
    757757
    758 int GuestDnDTarget::i_sendDirectory(PSENDDATACTX pCtx, GuestDnDMsg *pMsg, DnDURIObject &aDirectory)
    759 {
    760     AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
    761 
    762     RTCString strPath = aDirectory.GetDestPath();
     758int GuestDnDTarget::i_sendDirectory(PSENDDATACTX pCtx, GuestDnDMsg *pMsg, DnDURIObject *pObject)
     759{
     760    AssertPtrReturn(pObject, VERR_INVALID_POINTER);
     761    AssertPtrReturn(pCtx,    VERR_INVALID_POINTER);
     762
     763    RTCString strPath = pObject->GetDestPath();
    763764    if (strPath.isEmpty())
    764765        return VERR_INVALID_PARAMETER;
     
    771772    pMsg->setNextString(strPath.c_str());                  /* path */
    772773    pMsg->setNextUInt32((uint32_t)(strPath.length() + 1)); /* path length - note: Maximum is RTPATH_MAX on guest side. */
    773     pMsg->setNextUInt32(aDirectory.GetMode());             /* mode */
     774    pMsg->setNextUInt32(pObject->GetMode());             /* mode */
    774775
    775776    return VINF_SUCCESS;
    776777}
    777778
    778 int GuestDnDTarget::i_sendFile(PSENDDATACTX pCtx, GuestDnDMsg *pMsg, DnDURIObject &aFile)
    779 {
    780     AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
    781 
    782     RTCString strPathSrc = aFile.GetSourcePath();
     779int GuestDnDTarget::i_sendFile(PSENDDATACTX pCtx, GuestDnDMsg *pMsg, DnDURIObject *pObject)
     780{
     781    AssertPtrReturn(pObject, VERR_INVALID_POINTER);
     782    AssertPtrReturn(pCtx,    VERR_INVALID_POINTER);
     783
     784    RTCString strPathSrc = pObject->GetSourcePath();
    783785    if (strPathSrc.isEmpty())
    784786        return VERR_INVALID_PARAMETER;
     
    789791                 strPathSrc.c_str(), mData.mcbBlockSize, mDataBase.mProtocolVersion));
    790792
    791     bool fOpen = aFile.IsOpen();
     793    bool fOpen = pObject->IsOpen();
    792794    if (!fOpen)
    793795    {
    794796        LogFlowFunc(("Opening \"%s\" ...\n", strPathSrc.c_str()));
    795         rc = aFile.OpenEx(strPathSrc, DnDURIObject::File, DnDURIObject::Source,
     797        rc = pObject->OpenEx(strPathSrc, DnDURIObject::File, DnDURIObject::Source,
    796798                          RTFILE_O_OPEN | RTFILE_O_READ | RTFILE_O_DENY_WRITE, 0 /* fFlags */);
    797799        if (RT_FAILURE(rc))
     
    813815                pMsg->setType(DragAndDropSvc::HOST_DND_HG_SND_FILE_HDR);
    814816                pMsg->setNextUInt32(0);                                            /* context ID */
    815                 rc = pMsg->setNextString(aFile.GetDestPath().c_str());             /* pvName */
     817                rc = pMsg->setNextString(pObject->GetDestPath().c_str());             /* pvName */
    816818                AssertRC(rc);
    817                 pMsg->setNextUInt32((uint32_t)(aFile.GetDestPath().length() + 1)); /* cbName */
     819                pMsg->setNextUInt32((uint32_t)(pObject->GetDestPath().length() + 1)); /* cbName */
    818820                pMsg->setNextUInt32(0);                                            /* uFlags */
    819                 pMsg->setNextUInt32(aFile.GetMode());                              /* fMode */
    820                 pMsg->setNextUInt64(aFile.GetSize());                              /* uSize */
     821                pMsg->setNextUInt32(pObject->GetMode());                              /* fMode */
     822                pMsg->setNextUInt64(pObject->GetSize());                              /* uSize */
    821823
    822824                LogFlowFunc(("Sending file header ...\n"));
    823825                LogRel2(("DnD: Transferring host file to guest: %s (%RU64 bytes, mode 0x%x)\n",
    824                          strPathSrc.c_str(), aFile.GetSize(), aFile.GetMode()));
     826                         strPathSrc.c_str(), pObject->GetSize(), pObject->GetMode()));
    825827
    826828                /** @todo Set progress object title to current file being transferred? */
     
    842844        && fSendFileData)
    843845    {
    844         rc = i_sendFileData(pCtx, pMsg, aFile);
     846        rc = i_sendFileData(pCtx, pMsg, pObject);
    845847    }
    846848
     
    849851}
    850852
    851 int GuestDnDTarget::i_sendFileData(PSENDDATACTX pCtx, GuestDnDMsg *pMsg, DnDURIObject &aFile)
    852 {
    853     AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
    854     AssertPtrReturn(pMsg, VERR_INVALID_POINTER);
     853int GuestDnDTarget::i_sendFileData(PSENDDATACTX pCtx, GuestDnDMsg *pMsg, DnDURIObject *pObject)
     854{
     855    AssertPtrReturn(pObject, VERR_INVALID_POINTER);
     856    AssertPtrReturn(pCtx,    VERR_INVALID_POINTER);
     857    AssertPtrReturn(pMsg,    VERR_INVALID_POINTER);
    855858
    856859    GuestDnDResponse *pResp = pCtx->mpResp;
     
    877880    if (mDataBase.mProtocolVersion <= 1)
    878881    {
    879         pMsg->setNextString(aFile.GetDestPath().c_str());                  /* pvName */
    880         pMsg->setNextUInt32((uint32_t)(aFile.GetDestPath().length() + 1)); /* cbName */
     882        pMsg->setNextString(pObject->GetDestPath().c_str());                  /* pvName */
     883        pMsg->setNextUInt32((uint32_t)(pObject->GetDestPath().length() + 1)); /* cbName */
    881884    }
    882885    else
     
    888891    uint32_t cbRead = 0;
    889892
    890     int rc = aFile.Read(pCtx->mURI.pvScratchBuf, pCtx->mURI.cbScratchBuf, &cbRead);
     893    int rc = pObject->Read(pCtx->mURI.pvScratchBuf, pCtx->mURI.cbScratchBuf, &cbRead);
    891894    if (RT_SUCCESS(rc))
    892895    {
     
    897900            pMsg->setNextPointer(pCtx->mURI.pvScratchBuf, cbRead);  /* pvData */
    898901            pMsg->setNextUInt32(cbRead);                            /* cbData */
    899             pMsg->setNextUInt32(aFile.GetMode());                   /* fMode */
     902            pMsg->setNextUInt32(pObject->GetMode());                   /* fMode */
    900903        }
    901904        else
     
    905908        }
    906909
    907         if (aFile.IsComplete()) /* Done reading? */
    908         {
    909             LogRel2(("DnD: File transfer to guest complete: %s\n", aFile.GetSourcePath().c_str()));
    910             LogFlowFunc(("File \"%s\" complete\n", aFile.GetSourcePath().c_str()));
     910        if (pObject->IsComplete()) /* Done reading? */
     911        {
     912            LogRel2(("DnD: File transfer to guest complete: %s\n", pObject->GetSourcePath().c_str()));
     913            LogFlowFunc(("File \"%s\" complete\n", pObject->GetSourcePath().c_str()));
    911914            rc = VINF_EOF;
    912915        }
     
    12611264
    12621265    Assert(!lstURI.IsEmpty());
    1263     DnDURIObject &curObj = lstURI.First();
    1264 
    1265     uint32_t fMode = curObj.GetMode();
     1266    DnDURIObject *pCurObj = lstURI.First();
     1267
     1268    uint32_t fMode = pCurObj->GetMode();
    12661269    LogFlowFunc(("Processing srcPath=%s, dstPath=%s, fMode=0x%x, cbSize=%RU32, fIsDir=%RTbool, fIsFile=%RTbool\n",
    1267                  curObj.GetSourcePath().c_str(), curObj.GetDestPath().c_str(),
    1268                  fMode, curObj.GetSize(),
     1270                 pCurObj->GetSourcePath().c_str(), pCurObj->GetDestPath().c_str(),
     1271                 fMode, pCurObj->GetSize(),
    12691272                 RTFS_IS_DIRECTORY(fMode), RTFS_IS_FILE(fMode)));
    12701273
    12711274    if (RTFS_IS_DIRECTORY(fMode))
    12721275    {
    1273         rc = i_sendDirectory(pCtx, pMsg, curObj);
     1276        rc = i_sendDirectory(pCtx, pMsg, pCurObj);
    12741277    }
    12751278    else if (RTFS_IS_FILE(fMode))
    12761279    {
    1277         rc = i_sendFile(pCtx, pMsg, curObj);
     1280        rc = i_sendFile(pCtx, pMsg, pCurObj);
    12781281    }
    12791282    else
    12801283    {
    12811284        AssertMsgFailed(("fMode=0x%x is not supported for srcPath=%s, dstPath=%s\n",
    1282                          fMode, curObj.GetSourcePath().c_str(), curObj.GetDestPath().c_str()));
     1285                         fMode, pCurObj->GetSourcePath().c_str(), pCurObj->GetDestPath().c_str()));
    12831286        rc = VERR_NOT_SUPPORTED;
    12841287    }
    12851288
    12861289    bool fRemove = false; /* Remove current entry? */
    1287     if (   curObj.IsComplete()
     1290    if (   pCurObj->IsComplete()
    12881291        || RT_FAILURE(rc))
    12891292    {
     
    12931296    if (fRemove)
    12941297    {
    1295         LogFlowFunc(("Removing \"%s\" from list, rc=%Rrc\n", curObj.GetSourcePath().c_str(), rc));
     1298        LogFlowFunc(("Removing \"%s\" from list, rc=%Rrc\n", pCurObj->GetSourcePath().c_str(), rc));
    12961299        lstURI.RemoveFirst();
    12971300    }
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