VirtualBox

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.

File:
1 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        }
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