VirtualBox

Changeset 69758 in vbox


Ignore:
Timestamp:
Nov 19, 2017 3:23:57 PM (7 years ago)
Author:
vboxsync
Message:

VBoxManageGuestCtrl.cpp,DnDURIList.cpp: Fix RTDIRENTRYTYPE_UNKNOWN problem by using RTDirReadExA. Untested.

Location:
trunk/src/VBox
Files:
2 edited

Legend:

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

    r69753 r69758  
    22322232             * Enumerate the directory tree.
    22332233             */
     2234            size_t        cbDirEntry = 0;
     2235            PRTDIRENTRYEX pDirEntry  = NULL;
    22342236            while (RT_SUCCESS(vrc))
    22352237            {
    2236                 RTDIRENTRY DirEntry;
    2237                 vrc = RTDirRead(hDir, &DirEntry, NULL);
     2238                vrc = RTDirReadExA(hDir, &pDirEntry, &cbDirEntry, RTFSOBJATTRADD_NOTHING, 0);
    22382239                if (RT_FAILURE(vrc))
    22392240                {
     
    22422243                    break;
    22432244                }
    2244                 /** @todo r=bird: This ain't gonna work on most UNIX file systems because
    2245                  *        enmType is RTDIRENTRYTYPE_UNKNOWN.  This is clearly documented in
    2246                  *        RTDIRENTRY::enmType. For trunk, RTDirQueryUnknownType can be used. */
    2247                 switch (DirEntry.enmType)
     2245
     2246                switch (pDirEntry->Info.Attr.fMode & RTFS_TYPE_MASK)
    22482247                {
    2249                     case RTDIRENTRYTYPE_DIRECTORY:
     2248                    case RTFS_TYPE_DIRECTORY:
    22502249                    {
    22512250                        /* Skip "." and ".." entries. */
    2252                         if (   !strcmp(DirEntry.szName, ".")
    2253                             || !strcmp(DirEntry.szName, ".."))
     2251                        if (RTDirEntryExIsStdDotLink(pDirEntry))
    22542252                            break;
    22552253
    22562254                        if (pContext->pCmdCtx->cVerbose)
    2257                             RTPrintf("Directory: %s\n", DirEntry.szName);
     2255                            RTPrintf("Directory: %s\n", pDirEntry->szName);
    22582256
    22592257                        if (enmFlags & kGctlCopyFlags_Recursive)
     
    22612259                            char *pszNewSub = NULL;
    22622260                            if (pszSubDir)
    2263                                 pszNewSub = RTPathJoinA(pszSubDir, DirEntry.szName);
     2261                                pszNewSub = RTPathJoinA(pszSubDir, pDirEntry->szName);
    22642262                            else
    22652263                            {
    2266                                 pszNewSub = RTStrDup(DirEntry.szName);
     2264                                pszNewSub = RTStrDup(pDirEntry->szName);
    22672265                                RTPathStripTrailingSlash(pszNewSub);
    22682266                            }
     
    22812279                    }
    22822280
    2283                     case RTDIRENTRYTYPE_SYMLINK:
     2281                    case RTFS_TYPE_SYMLINK:
    22842282                        if (   (enmFlags & kGctlCopyFlags_Recursive)
    22852283                            && (enmFlags & kGctlCopyFlags_FollowLinks))
    2286                         {
    2287                             /* Fall through to next case is intentional. */
    2288                         }
     2284                        { /* Fall through to next case is intentional. */ }
    22892285                        else
    22902286                            break;
    2291 
    2292                     case RTDIRENTRYTYPE_FILE:
     2287                        RT_FALL_THRU();
     2288
     2289                    case RTFS_TYPE_FILE:
    22932290                    {
    22942291                        if (   pszFilter
    2295                             && !RTStrSimplePatternMatch(pszFilter, DirEntry.szName))
     2292                            && !RTStrSimplePatternMatch(pszFilter, pDirEntry->szName))
    22962293                        {
    22972294                            break; /* Filter does not match. */
     
    22992296
    23002297                        if (pContext->pCmdCtx->cVerbose)
    2301                             RTPrintf("File: %s\n", DirEntry.szName);
     2298                            RTPrintf("File: %s\n", pDirEntry->szName);
    23022299
    23032300                        if (!fDirCreated)
    23042301                        {
    23052302                            char *pszDestDir;
    2306                             vrc = gctlCopyTranslatePath(pszSource, szCurDir,
    2307                                                         pszDest, &pszDestDir);
     2303                            vrc = gctlCopyTranslatePath(pszSource, szCurDir, pszDest, &pszDestDir);
    23082304                            if (RT_SUCCESS(vrc))
    23092305                            {
     
    23172313                        if (RT_SUCCESS(vrc))
    23182314                        {
    2319                             char *pszFileSource = RTPathJoinA(szCurDir, DirEntry.szName);
     2315                            char *pszFileSource = RTPathJoinA(szCurDir, pDirEntry->szName);
    23202316                            if (pszFileSource)
    23212317                            {
    23222318                                char *pszFileDest;
    2323                                 vrc = gctlCopyTranslatePath(pszSource, pszFileSource,
    2324                                                            pszDest, &pszFileDest);
     2319                                vrc = gctlCopyTranslatePath(pszSource, pszFileSource, pszDest, &pszFileDest);
    23252320                                if (RT_SUCCESS(vrc))
    23262321                                {
     
    23422337            }
    23432338
     2339            RTDirReadExAFree(&pDirEntry, &cbDirEntry);
    23442340            RTDirClose(hDir);
    23452341        }
  • trunk/src/VBox/GuestHost/DragAndDrop/DnDURIList.cpp

    r69755 r69758  
    128128        {
    129129            rc = addEntry(pcszSrcPath, &pcszDstPath[cchDstBase], fFlags);
    130 
    131130            if (RT_SUCCESS(rc))
    132131            {
     
    135134                if (RT_SUCCESS(rc))
    136135                {
     136                    size_t        cbDirEntry = 0;
     137                    PRTDIRENTRYEX pDirEntry  = NULL;
    137138                    do
    138139                    {
    139                         RTDIRENTRY DirEntry;
    140                         rc = RTDirRead(hDir, &DirEntry, NULL);
     140                        /* Retrieve the next directory entry. */
     141                        rc = RTDirReadExA(hDir, &pDirEntry, &cbDirEntry, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
    141142                        if (RT_FAILURE(rc))
    142143                        {
     
    145146                            break;
    146147                        }
    147                         /** @todo r=bird: you really need to read the documentation! I already
    148                          *        pointed out that this isn't goint to work in the guest control
    149                          *        code. sigh. */
    150 
    151                         switch (DirEntry.enmType)
     148
     149                        switch (pDirEntry->Info.Attr.fMode & RTFS_TYPE_MASK)
    152150                        {
    153                             case RTDIRENTRYTYPE_DIRECTORY:
     151                            case RTFS_TYPE_DIRECTORY:
    154152                            {
    155153                                /* Skip "." and ".." entries. */
    156                                 if (RTDirEntryIsStdDotLink(&DirEntry))
     154                                if (RTDirEntryExIsStdDotLink(pDirEntry))
    157155                                    break;
    158156
    159                                 char *pszSrc = RTPathJoinA(pcszSrcPath, DirEntry.szName);
     157                                char *pszSrc = RTPathJoinA(pcszSrcPath, pDirEntry->szName);
    160158                                if (pszSrc)
    161159                                {
    162                                     char *pszDst = RTPathJoinA(pcszDstPath, DirEntry.szName);
     160                                    char *pszDst = RTPathJoinA(pcszDstPath, pDirEntry->szName);
    163161                                    if (pszDst)
    164162                                    {
     
    176174                            }
    177175
    178                             case RTDIRENTRYTYPE_FILE:
     176                            case RTFS_TYPE_FILE:
    179177                            {
    180                                 char *pszSrc = RTPathJoinA(pcszSrcPath, DirEntry.szName);
     178                                char *pszSrc = RTPathJoinA(pcszSrcPath, pDirEntry->szName);
    181179                                if (pszSrc)
    182180                                {
    183                                     char *pszDst = RTPathJoinA(pcszDstPath, DirEntry.szName);
     181                                    char *pszDst = RTPathJoinA(pcszDstPath, pDirEntry->szName);
    184182                                    if (pszDst)
    185183                                    {
     
    195193                                break;
    196194                            }
    197                             case RTDIRENTRYTYPE_SYMLINK:
     195                            case RTFS_TYPE_SYMLINK:
    198196                            {
    199197                                if (fFlags & DNDURILIST_FLAGS_RESOLVE_SYMLINKS)
     
    233231                    } while (RT_SUCCESS(rc));
    234232
     233                    RTDirReadExAFree(&pDirEntry, &cbDirEntry);
    235234                    RTDirClose(hDir);
    236235                }
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