Changeset 1284


Ignore:
Timestamp:
Nov 19, 2008, 6:46:28 PM (17 years ago)
Author:
Steven Levine
Message:

Correct and sanitize 4 pass scan logic

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/filldir.c

    r1250 r1284  
    5151  08 Sep 08 SHL Remove extra pszLongName logic in FreeCnrItemData
    5252  18 Oct 08 GKY Scan drives in 4 passes (local, virtual, remote, flagged slow) to speed tree scans
     53  19 Nov 08 SHL Correct and sanitize 4 pass scan logic
    5354
    5455***********************************************************************/
     
    11351136  BOOL drivesbuilt = FALSE;
    11361137  ULONG startdrive = 3;
    1137   LONG TestFlags[3];
    1138 
     1138  static LONG whenToCheck[] = {
     1139    0,
     1140    DRIVE_VIRTUAL,
     1141    DRIVE_REMOTE,
     1142    DRIVE_SLOW};
     1143  USHORT checked[26] = { 0 };
    11391144  static BOOL didonce = FALSE;
    11401145
     
    13151320            pci->pszDispAttr = FileAttrToString(pci->attrFile);
    13161321          }
    1317           SelectDriveIcon(pci);
     1322          SelectDriveIcon(pci);
    13181323#         ifdef FORTIFY
    13191324          // Will be freed by TreeCnrWndProc WM_DESTROY
     
    13211326#         endif
    13221327        }
    1323         else {
     1328        else {
    13241329          pci->rc.hptrIcon = hptrDunno;
    13251330          pci->pszFileName = xstrdup(szDrive, pszSrcFile, __LINE__);
     
    14801485    }
    14811486  } // if show env
    1482   TestFlags[0] = DRIVE_SLOW | DRIVE_VIRTUAL | DRIVE_REMOTE;
    1483   TestFlags[1] = DRIVE_VIRTUAL;
    1484   TestFlags[2] = DRIVE_REMOTE;
    1485   TestFlags[3] = DRIVE_SLOW;
    1486   x = 0;
    1487   // Scan drives in 4 passes based on TestFlags
     1487  // Scan drives in 4 passes checking fastest to slowest
    14881488  for (x = 0; x < 4; x++) {
    14891489    pci = (PCNRITEM) WinSendMsg(hwndCnr,
    1490                                 CM_QUERYRECORD,
    1491                                 MPVOID,
    1492                                 MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER));
     1490                                CM_QUERYRECORD,
     1491                                MPVOID,
     1492                                MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER));
    14931493    while (pci && (INT)pci != -1) {
    14941494      pciNext = (PCNRITEM) WinSendMsg(hwndCnr,
    1495                                       CM_QUERYRECORD,
    1496                                       MPFROMP(pci),
    1497                                       MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER));
    1498       if (!(pci->flags & RECFLAGS_ENV)) {
    1499         if ((ULONG) (toupper(*pci->pszFileName) - '@') == ulCurDriveNum ||
    1500             toupper(*pci->pszFileName) > 'B') {
    1501           if (!(driveflags[toupper(*pci->pszFileName) - 'A'] & DRIVE_INVALID) &&
    1502               !(driveflags[toupper(*pci->pszFileName) - 'A'] & DRIVE_NOPRESCAN) &&
    1503               (!fNoRemovableScan ||
    1504               !(driveflags[toupper(*pci->pszFileName) - 'A'] & DRIVE_REMOVABLE)) &&
    1505               (x == 0 ? (!(TestFlags[x] & (driveflags[toupper(*pci->pszFileName) - 'A']))) :
    1506                x == 3 ? (TestFlags[x] & (driveflags[toupper(*pci->pszFileName) - 'A'])) :
    1507                ((TestFlags[x] & (driveflags[toupper(*pci->pszFileName) - 'A'])) &&
    1508                 !((driveflags[toupper(*pci->pszFileName) - 'A']) & DRIVE_SLOW)))) {
    1509             if (!Stubby(hwndCnr, pci) && !DRIVE_RAMDISK) {
    1510               WinSendMsg(hwndCnr,
    1511                          CM_INVALIDATERECORD,
    1512                          MPFROMP(&pci),
    1513                          MPFROM2SHORT(1, CMA_ERASE | CMA_REPOSITION));
    1514               goto SkipBadRec;
    1515             }
    1516           }
    1517         }
    1518         else {
    1519           WinSendMsg(hwndCnr,
    1520                      CM_INVALIDATERECORD,
    1521                      MPFROMP(&pci),
    1522                      MPFROM2SHORT(1, CMA_ERASE | CMA_REPOSITION));
    1523         }
    1524         WinSendMsg(WinWindowFromID(WinQueryWindow(hwndParent, QW_PARENT),
    1525                                    MAIN_DRIVELIST),
    1526                    LM_INSERTITEM,
    1527                    MPFROM2SHORT(LIT_SORTASCENDING, 0),
    1528                    MPFROMP(pci->pszFileName));
     1495                                      CM_QUERYRECORD,
     1496                                      MPFROMP(pci),
     1497                                      MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER));
     1498      if (~pci->flags & RECFLAGS_ENV) {
     1499        ULONG drvNum = toupper(*pci->pszFileName) - 'A';        // 0..25
     1500        if (drvNum == ulCurDriveNum || drvNum >= 2) {
     1501          ULONG flags = driveflags[drvNum];     // Speed up
     1502          if (~flags & DRIVE_INVALID &&
     1503              ~flags & DRIVE_NOPRESCAN &&
     1504              !checked[drvNum] &&
     1505              (!fNoRemovableScan || (~flags & DRIVE_REMOVABLE)) &&
     1506              (flags & (DRIVE_SLOW | DRIVE_VIRTUAL | DRIVE_REMOTE)) ==
     1507                whenToCheck[x])
     1508          {
     1509            if (!Stubby(hwndCnr, pci) && !DRIVE_RAMDISK) {
     1510              WinSendMsg(hwndCnr,
     1511                         CM_INVALIDATERECORD,
     1512                         MPFROMP(&pci),
     1513                         MPFROM2SHORT(1, CMA_ERASE | CMA_REPOSITION));
     1514              goto SkipBadRec;
     1515            }
     1516            checked[drvNum] = TRUE;
     1517          } // if this pass
     1518        }
     1519        else {
     1520          WinSendMsg(hwndCnr,
     1521                     CM_INVALIDATERECORD,
     1522                     MPFROMP(&pci),
     1523                     MPFROM2SHORT(1, CMA_ERASE | CMA_REPOSITION));
     1524        }
     1525        if (x == 0) {
     1526          // Add to drives drop down
     1527          WinSendMsg(WinWindowFromID(WinQueryWindow(hwndParent, QW_PARENT),
     1528                                     MAIN_DRIVELIST),
     1529                     LM_INSERTITEM,
     1530                     MPFROM2SHORT(LIT_SORTASCENDING, 0),
     1531                     MPFROMP(pci->pszFileName));
     1532        }
    15291533      }
    15301534    SkipBadRec:
Note: See TracChangeset for help on using the changeset viewer.