VirtualBox

Changeset 97555 in vbox for trunk/src/VBox/Main


Ignore:
Timestamp:
Nov 15, 2022 5:07:35 PM (2 years ago)
Author:
vboxsync
Message:

Guest Control/Main: Also support copying files from the guest to symbolic links on the host. bugref:10286

File:
1 edited

Legend:

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

    r97553 r97555  
    16731673        bool            fDstExists        = true;
    16741674
    1675         RTFSOBJINFO ObjInfo;
    1676         RT_ZERO(ObjInfo);
    1677         vrc = RTPathQueryInfoEx(strDstRootAbs.c_str(), &ObjInfo, RTFSOBJATTRADD_NOTHING,
    1678                                 fFollowSymlinks ? RTPATH_F_FOLLOW_LINK : RTPATH_F_ON_LINK /* fFlags */);
    1679         if (RT_FAILURE(vrc))
     1675        RTFSOBJINFO dstFsObjInfo;
     1676        RT_ZERO(dstFsObjInfo);
     1677        vrc = RTPathQueryInfoEx(strDstRootAbs.c_str(), &dstFsObjInfo, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK /* fFlags */);
     1678        if (RT_SUCCESS(vrc))
     1679        {
     1680            char szPathReal[RTPATH_MAX];
     1681            vrc = RTPathReal(strDstRootAbs.c_str(), szPathReal, sizeof(szPathReal));
     1682            if (RT_SUCCESS(vrc))
     1683            {
     1684                vrc = RTPathQueryInfoEx(szPathReal, &dstFsObjInfo, RTFSOBJATTRADD_NOTHING, RTPATH_F_FOLLOW_LINK /* fFlags */);
     1685                if (RT_SUCCESS(vrc))
     1686                {
     1687                    LogRel2(("Guest Control: Host destination is a symbolic link '%s' -> '%s' (%s)\n",
     1688                             strDstRootAbs.c_str(), szPathReal,
     1689                             GuestBase::fsObjTypeToStr(GuestBase::fileModeToFsObjType(dstFsObjInfo.Attr.fMode))));
     1690                }
     1691
     1692                strDstRootAbs = szPathReal;
     1693            }
     1694        }
     1695        else
    16801696        {
    16811697            if (   vrc == VERR_FILE_NOT_FOUND
     
    16981714            LogFlowFunc(("Directory: fDirCopyFlags=%#x, fCopyIntoExisting=%RTbool, fFollowSymlinks=%RTbool -> fDstExist=%RTbool (%s)\n",
    16991715                         pList->mSourceSpec.fDirCopyFlags, fCopyIntoExisting, fFollowSymlinks,
    1700                          fDstExists, GuestBase::fsObjTypeToStr(GuestBase::fileModeToFsObjType(ObjInfo.Attr.fMode))));
     1716                         fDstExists, GuestBase::fsObjTypeToStr(GuestBase::fileModeToFsObjType(dstFsObjInfo.Attr.fMode))));
    17011717
    17021718            if (fDstExists)
    17031719            {
    1704                 switch (ObjInfo.Attr.fMode & RTFS_TYPE_MASK)
     1720                switch (dstFsObjInfo.Attr.fMode & RTFS_TYPE_MASK)
    17051721                {
    17061722                    case RTFS_TYPE_DIRECTORY:
     
    17281744                        setProgressErrorMsg(VBOX_E_IPRT_ERROR,
    17291745                                            Utf8StrFmt(tr("Unknown object type (%#x) on host for \"%s\""),
    1730                                                        ObjInfo.Attr.fMode & RTFS_TYPE_MASK, strDstRootAbs.c_str()));
     1746                                                       dstFsObjInfo.Attr.fMode & RTFS_TYPE_MASK, strDstRootAbs.c_str()));
    17311747                        vrc = VERR_NOT_SUPPORTED;
    17321748                        break;
     
    18161832            LogFlowFunc(("File: fFileCopyFlags=%#x, fCopyIntoExisting=%RTbool, fFollowSymlinks=%RTbool -> fDstExist=%RTbool (%s)\n",
    18171833                         pList->mSourceSpec.fFileCopyFlags, fCopyIntoExisting, fFollowSymlinks,
    1818                          fDstExists, GuestBase::fsObjTypeToStr(GuestBase::fileModeToFsObjType(ObjInfo.Attr.fMode))));
     1834                         fDstExists, GuestBase::fsObjTypeToStr(GuestBase::fileModeToFsObjType(dstFsObjInfo.Attr.fMode))));
    18191835
    18201836            if (fDstExists)
    18211837            {
    1822                 switch (ObjInfo.Attr.fMode & RTFS_TYPE_MASK)
     1838                switch (dstFsObjInfo.Attr.fMode & RTFS_TYPE_MASK)
    18231839                {
    18241840                    case RTFS_TYPE_DIRECTORY:
     
    18471863                        setProgressErrorMsg(VBOX_E_IPRT_ERROR,
    18481864                                            Utf8StrFmt(tr("Unknown object type (%#x) on host for \"%s\""),
    1849                                                        ObjInfo.Attr.fMode & RTFS_TYPE_MASK, strDstRootAbs.c_str()));
     1865                                                       dstFsObjInfo.Attr.fMode & RTFS_TYPE_MASK, strDstRootAbs.c_str()));
    18501866                        vrc = VERR_NOT_SUPPORTED;
    18511867                        break;
     
    20182034                        if (RT_SUCCESS(vrc))
    20192035                        {
    2020                             LogRel2(("Guest Control: Host source symbolic link '%s' -> '%s' (%s)\n",
     2036                            LogRel2(("Guest Control: Host source is a symbolic link '%s' -> '%s' (%s)\n",
    20212037                                     strSrc.c_str(), szPathReal,
    20222038                                     GuestBase::fsObjTypeToStr(GuestBase::fileModeToFsObjType(srcFsObjInfo.Attr.fMode))));
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