VirtualBox

Ignore:
Timestamp:
Oct 22, 2019 7:36:15 PM (5 years ago)
Author:
vboxsync
Message:

Shared Clipboard/Transfers: Various bugfixes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/GuestHost/SharedClipboard/ClipboardDataObjectImpl-win.cpp

    r81438 r81460  
    265265                    {
    266266                        SHCLLISTENTRY entryList;
    267                         rc = ShClTransferListRead(pTransfer, hList, &entryList);
     267                        rc = ShClTransferListEntryInit(&entryList);
    268268                        if (RT_SUCCESS(rc))
    269269                        {
    270                             PSHCLFSOBJINFO pFsObjInfo = (PSHCLFSOBJINFO)entryList.pvInfo;
    271                             Assert(entryList.cbInfo == sizeof(SHCLFSOBJINFO));
    272 
    273                             Utf8Str strPath = strDir + Utf8Str("\\") + Utf8Str(entryList.pszName);
    274 
    275                             LogFlowFunc(("\t%s (%RU64 bytes) -> %s\n",
    276                                          entryList.pszName, pFsObjInfo->cbObject, strPath.c_str()));
    277 
    278                             if (RTFS_IS_DIRECTORY(pFsObjInfo->Attr.fMode))
     270                            rc = ShClTransferListRead(pTransfer, hList, &entryList);
     271                            if (RT_SUCCESS(rc))
    279272                            {
    280                                 /* Note: Directories are *not* required to be part of m_lstEntries, as we only
    281                                  *       count files to transfer there. */
    282 
    283                                 rc = readDir(pTransfer, strPath.c_str());
     273                                if (ShClTransferListEntryIsValid(&entryList))
     274                                {
     275                                    PSHCLFSOBJINFO pFsObjInfo = (PSHCLFSOBJINFO)entryList.pvInfo;
     276                                    Assert(entryList.cbInfo == sizeof(SHCLFSOBJINFO));
     277
     278                                    Utf8Str strPath = strDir + Utf8Str("\\") + Utf8Str(entryList.pszName);
     279
     280                                    LogFlowFunc(("\t%s (%RU64 bytes) -> %s\n",
     281                                                 entryList.pszName, pFsObjInfo->cbObject, strPath.c_str()));
     282
     283                                    if (RTFS_IS_DIRECTORY(pFsObjInfo->Attr.fMode))
     284                                    {
     285                                        FSOBJENTRY objEntry = { strPath.c_str(), *pFsObjInfo };
     286
     287                                        m_lstEntries.push_back(objEntry); /** @todo Can this throw? */
     288
     289                                        rc = readDir(pTransfer, strPath.c_str());
     290                                    }
     291                                    else if (RTFS_IS_FILE(pFsObjInfo->Attr.fMode))
     292                                    {
     293                                        FSOBJENTRY objEntry = { strPath.c_str(), *pFsObjInfo };
     294
     295                                        m_lstEntries.push_back(objEntry); /** @todo Can this throw? */
     296                                    }
     297                                    else
     298                                        rc = VERR_NOT_SUPPORTED;
     299
     300                                    /** @todo Handle symlinks. */
     301                                }
     302                                else
     303                                    rc = VERR_INVALID_PARAMETER;
    284304                            }
    285                             else if (RTFS_IS_FILE(pFsObjInfo->Attr.fMode))
    286                             {
    287                                 FSOBJENTRY objEntry = { strPath.c_str(), *pFsObjInfo };
    288 
    289                                 m_lstEntries.push_back(objEntry); /** @todo Can this throw? */
    290                             }
    291 
    292                             /** @todo Handle symlinks. */
     305
     306                            ShClTransferListEntryDestroy(&entryList);
    293307                        }
    294308
     
    359373                if (RTFS_IS_DIRECTORY(pFsObjInfo->Attr.fMode))
    360374                {
    361                     /* Note: Directories are *not* required to be part of m_lstEntries, as we only
    362                      *       count files to transfer there. */
     375                    FSOBJENTRY objEntry = { pRootEntry->pszName, *pFsObjInfo };
     376
     377                    pThis->m_lstEntries.push_back(objEntry); /** @todo Can this throw? */
    363378
    364379                    rc = pThis->readDir(pTransfer, pRootEntry->pszName);
     
    370385                    pThis->m_lstEntries.push_back(objEntry); /** @todo Can this throw? */
    371386                }
     387                else
     388                    rc = VERR_NOT_SUPPORTED;
    372389
    373390                if (ASMAtomicReadBool(&pTransfer->Thread.fStop))
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