Changeset 297


Ignore:
Timestamp:
Jul 24, 2017, 10:24:58 PM (3 years ago)
Author:
Valery V. Sedletski
Message:
  • Change USHORT to ULONG in some places, to avoid overflow in case of FAt12/FAT16 partitions with a 64 KB cluster. Otherwise we could get division by zero in some cases.


Location:
trunk/src
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/ifs/fat32a.c

    r296 r297  
    15421542      // FAT12/FAT16 root directory starting sector
    15431543      ulSector = pVolInfo->BootSect.bpb.ReservedSectors +
    1544          pVolInfo->BootSect.bpb.SectorsPerFat * pVolInfo->BootSect.bpb.NumberOfFATs;
    1545       usSectorsPerBlock = (USHORT)pVolInfo->SectorsPerCluster /
    1546          (USHORT)(pVolInfo->ulClusterSize / pVolInfo->ulBlockSize);
     1544         (ULONG)pVolInfo->BootSect.bpb.SectorsPerFat * pVolInfo->BootSect.bpb.NumberOfFATs;
     1545      usSectorsPerBlock = (ULONG)pVolInfo->SectorsPerCluster /
     1546         ((ULONG)pVolInfo->ulClusterSize / pVolInfo->ulBlockSize);
    15471547      usSectorsRead = 0;
    15481548      }
     
    16021602               ulSector += pVolInfo->SectorsPerCluster;
    16031603               usSectorsRead += pVolInfo->SectorsPerCluster;
    1604                if (usSectorsRead * pVolInfo->BootSect.bpb.BytesPerSector >=
    1605                    pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY))
     1604               if ((ULONG)usSectorsRead * pVolInfo->BootSect.bpb.BytesPerSector >=
     1605                   (ULONG)pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY))
    16061606                  // root directory ended
    16071607                  ulCluster = 0;
     
    65366536      // FAT12/FAT16 root directory starting sector
    65376537      ulSector = pVolInfo->BootSect.bpb.ReservedSectors +
    6538          pVolInfo->BootSect.bpb.SectorsPerFat * pVolInfo->BootSect.bpb.NumberOfFATs;
    6539       usSectorsPerBlock = (USHORT)pVolInfo->SectorsPerCluster /
    6540          (USHORT)(pVolInfo->ulClusterSize / pVolInfo->ulBlockSize);
     6538         (ULONG)pVolInfo->BootSect.bpb.SectorsPerFat * pVolInfo->BootSect.bpb.NumberOfFATs;
     6539      usSectorsPerBlock = (ULONG)pVolInfo->SectorsPerCluster /
     6540         ((ULONG)pVolInfo->ulClusterSize / pVolInfo->ulBlockSize);
    65416541      usSectorsRead = 0;
    65426542      }
     
    65546554         ulSector += pVolInfo->SectorsPerCluster;
    65556555         usSectorsRead += pVolInfo->SectorsPerCluster;
    6556          if (usSectorsRead * pVolInfo->BootSect.bpb.BytesPerSector >=
    6557             pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY))
     6556         if ((ULONG)usSectorsRead * pVolInfo->BootSect.bpb.BytesPerSector >=
     6557            (ULONG)pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY))
    65586558            // root directory ended
    65596559            ulCluster = 0;
  • trunk/src/ifs/fat32b.c

    r296 r297  
    210210         // root directory starting sector
    211211         ulSector = pVolInfo->BootSect.bpb.ReservedSectors +
    212             pVolInfo->BootSect.bpb.SectorsPerFat * pVolInfo->BootSect.bpb.NumberOfFATs;
    213          usSectorsPerBlock = (USHORT)pVolInfo->SectorsPerCluster /
    214             (USHORT)(pVolInfo->ulClusterSize / pVolInfo->ulBlockSize);
     212            (ULONG)pVolInfo->BootSect.bpb.SectorsPerFat * pVolInfo->BootSect.bpb.NumberOfFATs;
     213         usSectorsPerBlock = (ULONG)pVolInfo->SectorsPerCluster /
     214            ((ULONG)pVolInfo->ulClusterSize / pVolInfo->ulBlockSize);
    215215         usSectorsRead = 0;
    216216         }
     
    299299                  ReadSector(pVolInfo, ulSector + ulBlock * usSectorsPerBlock, usSectorsPerBlock, (void *)pDirStart, 0);
    300300               else
    301                   ReadBlock(pVolInfo, ulCluster, ulBlock, pDirStart, 0); ////
     301                  ReadBlock(pVolInfo, ulCluster, ulBlock, pDirStart, 0);
    302302               pDir    = pDirStart;
    303303               pDirEnd = (PDIRENTRY)((PBYTE)pDirStart + pVolInfo->ulBlockSize);
     
    396396               ulSector += pVolInfo->SectorsPerCluster;
    397397               usSectorsRead += pVolInfo->SectorsPerCluster;
    398                if (usSectorsRead * pVolInfo->BootSect.bpb.BytesPerSector >=
    399                    pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY))
     398               if ((ULONG)usSectorsRead * pVolInfo->BootSect.bpb.BytesPerSector >=
     399                   (ULONG)pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY))
    400400                  // root directory ended
    401401                  ulCluster = 0;
     
    715715      // root directory starting sector
    716716      ulSector = pVolInfo->BootSect.bpb.ReservedSectors +
    717          pVolInfo->BootSect.bpb.SectorsPerFat * pVolInfo->BootSect.bpb.NumberOfFATs;
    718       usSectorsPerBlock = (USHORT)pVolInfo->SectorsPerCluster /
    719          (USHORT)(pVolInfo->ulClusterSize / pVolInfo->ulBlockSize);
     717         (ULONG)pVolInfo->BootSect.bpb.SectorsPerFat * pVolInfo->BootSect.bpb.NumberOfFATs;
     718      usSectorsPerBlock = (ULONG)pVolInfo->SectorsPerCluster /
     719         ((ULONG)pVolInfo->ulClusterSize / pVolInfo->ulBlockSize);
    720720      usSectorsRead = 0;
    721721      }
     
    863863            ulSector += pVolInfo->SectorsPerCluster;
    864864            usSectorsRead += pVolInfo->SectorsPerCluster;
    865             if (usSectorsRead * pVolInfo->BootSect.bpb.BytesPerSector >=
    866                 pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY))
     865            if ((ULONG)usSectorsRead * pVolInfo->BootSect.bpb.BytesPerSector >=
     866                (ULONG)pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY))
    867867               // root directory ended
    868868               ulCluster = 0;
     
    10381038         // root directory starting sector
    10391039         ulSector = pVolInfo->BootSect.bpb.ReservedSectors +
    1040             pVolInfo->BootSect.bpb.SectorsPerFat * pVolInfo->BootSect.bpb.NumberOfFATs;
    1041          usSectorsPerBlock = (USHORT)pVolInfo->SectorsPerCluster /
    1042             (USHORT)(pVolInfo->ulClusterSize / pVolInfo->ulBlockSize);
     1040            (ULONG)pVolInfo->BootSect.bpb.SectorsPerFat * pVolInfo->BootSect.bpb.NumberOfFATs;
     1041         usSectorsPerBlock = (ULONG)pVolInfo->SectorsPerCluster /
     1042            ((ULONG)pVolInfo->ulClusterSize / pVolInfo->ulBlockSize);
    10431043         usSectorsRead = 0;
    1044          ulBytesRemained = pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY);
     1044         ulBytesRemained = (ULONG)pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY);
    10451045         }
    10461046
     
    13171317                  ulSector += pVolInfo->SectorsPerCluster;
    13181318                  usSectorsRead += pVolInfo->SectorsPerCluster;
    1319                   if (usSectorsRead * pVolInfo->BootSect.bpb.BytesPerSector >=
    1320                       pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY))
     1319                  if ((ULONG)usSectorsRead * pVolInfo->BootSect.bpb.BytesPerSector >=
     1320                      (ULONG)pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY))
    13211321                     // root directory ended
    13221322                     ulNextCluster = 0;
     
    14981498      //   // root directory starting sector
    14991499      //   ulSector = pVolInfo->BootSect.bpb.ReservedSectors +
    1500       //      pVolInfo->BootSect.bpb.SectorsPerFat * pVolInfo->BootSect.bpb.NumberOfFATs;
    1501       //   usSectorsPerBlock = pVolInfo->SectorsPerCluster /
    1502       //      (pVolInfo->ulClusterSize / pVolInfo->ulBlockSize);
     1500      //      (ULONG)pVolInfo->BootSect.bpb.SectorsPerFat * pVolInfo->BootSect.bpb.NumberOfFATs;
     1501      //   usSectorsPerBlock = (ULONG)pVolInfo->SectorsPerCluster /
     1502      //      ((ULONG)pVolInfo->ulClusterSize / pVolInfo->ulBlockSize);
    15031503      //   usSectorsRead = 0;
    1504       //   ulBytesRemained = pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY);
     1504      //   ulBytesRemained = (ULONG)pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY);
    15051505      //   }
    15061506
     
    18231823               //   ulSector += pVolInfo->SectorsPerCluster;
    18241824               //   usSectorsRead += pVolInfo->SectorsPerCluster;
    1825                //   if (usSectorsRead * pVolInfo->BootSect.bpb.BytesPerSector >=
    1826                //       pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY))
     1825               //   if ((ULONG)usSectorsRead * pVolInfo->BootSect.bpb.BytesPerSector >=
     1826               //       (ULONG)pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY))
    18271827               //      // root directory ended
    18281828               //      ulNextCluster = 0;
  • trunk/src/ifs/ifsfile.c

    r296 r297  
    35883588         case FIL_QUERYEASFROMLISTL:
    35893589         case FIL_QUERYALLEAS:
    3590             usNeededSize = sizeof (EAOP);
     3590            usNeededSize = sizeof (EAOP); // 0x28 ???
    35913591            break;
    35923592         default                   :
  • trunk/src/ifs/ifsfind.c

    r296 r297  
    1414
    1515static USHORT FillDirEntry(PVOLINFO pVolInfo, PBYTE * ppData, PUSHORT pcbData, PFINDINFO pFindInfo, USHORT usLevel);
    16 static BOOL GetBlock(PVOLINFO pVolInfo, PFINDINFO pFindInfo, USHORT usBlockIndex);
     16static BOOL GetBlock(PVOLINFO pVolInfo, PFINDINFO pFindInfo, ULONG ulBlockIndex);
    1717
    1818/******************************************************************
     
    8484USHORT usIndex;
    8585USHORT usNeededLen;
    86 USHORT usNumClusters;
    87 USHORT usNumBlocks;
     86ULONG  ulNumClusters;
     87ULONG  ulNumBlocks;
    8888ULONG  ulCluster;
    8989ULONG  ulDirCluster;
     
    214214   pFindInfo->pSHInfo = NULL;
    215215
    216    usNumClusters = 0;
     216   ulNumClusters = 0;
    217217   ulDirCluster = FindDirCluster(pVolInfo,
    218218      pcdfsi,
     
    235235      {
    236236      // FAT12/FAT16 root directory size (contiguous)
    237       USHORT usRootDirSize = (USHORT)pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY) /
    238          (USHORT)(pVolInfo->SectorsPerCluster * pVolInfo->BootSect.bpb.BytesPerSector);
    239       usNumClusters = (pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY) %
    240          (pVolInfo->SectorsPerCluster * pVolInfo->BootSect.bpb.BytesPerSector)) ?
    241          usRootDirSize + 1 : usRootDirSize;
     237      ULONG ulRootDirSize = (ULONG)pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY) /
     238         ((ULONG)pVolInfo->SectorsPerCluster * pVolInfo->BootSect.bpb.BytesPerSector);
     239      ulNumClusters = ((ULONG)pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY) %
     240         ((ULONG)pVolInfo->SectorsPerCluster * pVolInfo->BootSect.bpb.BytesPerSector)) ?
     241         ulRootDirSize + 1 : ulRootDirSize;
    242242      }
    243243   else
     
    254254      while (ulCluster && ulCluster != pVolInfo->ulFatEof)
    255255         {
    256          usNumClusters++;
     256         ulNumClusters++;
    257257         //ulCluster = GetNextCluster(pVolInfo, pFindInfo->pSHInfo, ulCluster);
    258258         ulCluster = GetNextCluster(pVolInfo, NULL, ulCluster);
     
    260260      }
    261261
    262    usNumBlocks = usNumClusters * (USHORT)(pVolInfo->ulClusterSize / pVolInfo->ulBlockSize);
    263    ulNeededSpace = sizeof (FINFO) + (usNumBlocks - 1) * sizeof (ULONG);
     262   ulNumBlocks = ulNumClusters * ((ULONG)pVolInfo->ulClusterSize / pVolInfo->ulBlockSize);
     263   ulNeededSpace = sizeof (FINFO) + (ulNumBlocks - 1) * sizeof (ULONG);
    264264   ulNeededSpace += pVolInfo->ulBlockSize;
    265265
     
    288288   memcpy(&pFindInfo->pInfo->EAOP, &EAOP, sizeof (EAOP));
    289289   pFindInfo->pInfo->usEntriesPerBlock = (USHORT)(pVolInfo->ulBlockSize / sizeof (DIRENTRY));
    290    pFindInfo->pInfo->usBlockIndex = 0;
     290   pFindInfo->pInfo->ulBlockIndex = 0;
    291291   pFindInfo->pInfo->rgClusters[0] = ulDirCluster;
    292    pFindInfo->pInfo->usTotalBlocks = usNumBlocks;
     292   pFindInfo->pInfo->ulTotalBlocks = (USHORT)ulNumBlocks; ////
    293293   pFindInfo->pInfo->pDirEntries =
    294       (PDIRENTRY)(&pFindInfo->pInfo->rgClusters[usNumClusters]);
     294      (PDIRENTRY)(&pFindInfo->pInfo->rgClusters[ulNumClusters]);
    295295
    296296   MessageL(LOG_FIND, "pInfo%m at %lX, pDirEntries at %lX",
     
    307307      pFindInfo->pInfo->ulMaxEntry = pVolInfo->BootSect.bpb.RootDirEntries;
    308308   else
    309       pFindInfo->pInfo->ulMaxEntry = ((ULONG)pVolInfo->ulClusterSize / sizeof (DIRENTRY)) * usNumClusters;
     309      pFindInfo->pInfo->ulMaxEntry = ((ULONG)pVolInfo->ulClusterSize / sizeof (DIRENTRY)) * ulNumClusters;
    310310
    311311   if (!GetBlock(pVolInfo, pFindInfo, 0))
     
    612612PBYTE pStart = *ppData;
    613613USHORT rc;
    614 USHORT usBlockIndex;
     614ULONG  ulBlockIndex;
    615615
    616616   szLongName = (PSZ)malloc((size_t)FAT32MAXPATHCOMP);
     
    645645         memset(szShortName, 0, sizeof(szShortName)); // vs
    646646
    647          usBlockIndex = (USHORT)(pFindInfo->pInfo->ulCurEntry / pFindInfo->pInfo->usEntriesPerBlock);
    648          if (usBlockIndex != pFindInfo->pInfo->usBlockIndex)
     647         ulBlockIndex = (USHORT)(pFindInfo->pInfo->ulCurEntry / pFindInfo->pInfo->usEntriesPerBlock);
     648         if (ulBlockIndex != pFindInfo->pInfo->ulBlockIndex)
    649649            {
    650             if (!GetBlock(pVolInfo, pFindInfo, usBlockIndex))
     650            if (!GetBlock(pVolInfo, pFindInfo, ulBlockIndex))
    651651               {
    652652               rc = ERROR_SYS_INTERNAL;
     
    11631163      while (pFindInfo->pInfo->ulCurEntry < pFindInfo->pInfo->ulMaxEntry)
    11641164         {
    1165          usBlockIndex = (USHORT)(pFindInfo->pInfo->ulCurEntry / pFindInfo->pInfo->usEntriesPerBlock);
    1166          if (usBlockIndex != pFindInfo->pInfo->usBlockIndex)
     1165         ulBlockIndex = (USHORT)(pFindInfo->pInfo->ulCurEntry / pFindInfo->pInfo->usEntriesPerBlock);
     1166         if (ulBlockIndex != pFindInfo->pInfo->ulBlockIndex)
    11671167            {
    1168             if (!GetBlock(pVolInfo, pFindInfo, usBlockIndex))
     1168            if (!GetBlock(pVolInfo, pFindInfo, ulBlockIndex))
    11691169               {
    11701170               rc = ERROR_SYS_INTERNAL;
     
    18991899}
    19001900
    1901 BOOL GetBlock(PVOLINFO pVolInfo, PFINDINFO pFindInfo, USHORT usBlockIndex)
     1901BOOL GetBlock(PVOLINFO pVolInfo, PFINDINFO pFindInfo, ULONG ulBlockIndex)
    19021902{
    19031903USHORT usIndex;
    19041904USHORT usBlocksPerCluster = (USHORT)(pVolInfo->ulClusterSize / pVolInfo->ulBlockSize);
    1905 USHORT usClusterIndex = usBlockIndex / usBlocksPerCluster;
    1906 ULONG  ulBlock = usBlockIndex % usBlocksPerCluster;
     1905USHORT usClusterIndex = ulBlockIndex / usBlocksPerCluster;
     1906ULONG  ulBlock = ulBlockIndex % usBlocksPerCluster;
    19071907USHORT usSectorsPerBlock = (USHORT)pVolInfo->SectorsPerCluster /
    19081908         (USHORT)(pVolInfo->ulClusterSize / pVolInfo->ulBlockSize);
     
    19171917      }
    19181918
    1919    if (usBlockIndex >= pFindInfo->pInfo->usTotalBlocks)
     1919   if (ulBlockIndex >= pFindInfo->pInfo->ulTotalBlocks)
    19201920      return FALSE;
    19211921
     
    19241924      if (fRootDir)
    19251925         {
    1926          usIndex = pFindInfo->pInfo->usBlockIndex / usBlocksPerCluster;
     1926         usIndex = pFindInfo->pInfo->ulBlockIndex / usBlocksPerCluster;
    19271927         ulSector = pVolInfo->BootSect.bpb.ReservedSectors +
    19281928            pVolInfo->BootSect.bpb.SectorsPerFat * pVolInfo->BootSect.bpb.NumberOfFATs +
     
    19301930         usSectorsRead = usIndex * (USHORT)pVolInfo->SectorsPerCluster;
    19311931         }
    1932       for (usIndex = pFindInfo->pInfo->usBlockIndex / usBlocksPerCluster; usIndex < usClusterIndex; usIndex++)
     1932      for (usIndex = pFindInfo->pInfo->ulBlockIndex / usBlocksPerCluster; usIndex < usClusterIndex; usIndex++)
    19331933         {
    19341934         if (fRootDir)
     
    19871987      pFindInfo->pInfo->rgClusters[0] = 1;
    19881988
    1989    pFindInfo->pInfo->usBlockIndex = usBlockIndex;
     1989   pFindInfo->pInfo->ulBlockIndex = ulBlockIndex;
    19901990   return TRUE;
    19911991}
  • trunk/src/ifs/ifsmount.c

    r296 r297  
    514514         else if (pVolInfo->bFatType < FAT_TYPE_FAT32)
    515515            {
    516             pVolInfo->ulStartOfData    = pSect->bpb.ReservedSectors +
    517                pSect->bpb.SectorsPerFat * pSect->bpb.NumberOfFATs +
    518                (pSect->bpb.RootDirEntries * sizeof(DIRENTRY)) / pSect->bpb.BytesPerSector;
     516            PBOOTSECT0 pSect0 = (PBOOTSECT0)pSect;
     517            pVolInfo->ulStartOfData    = pSect0->bpb.ReservedSectors +
     518               pSect0->bpb.SectorsPerFat * pSect0->bpb.NumberOfFATs +
     519               ((ULONG)pSect0->bpb.RootDirEntries * sizeof(DIRENTRY)) / pSect0->bpb.BytesPerSector +
     520               ((((ULONG)pSect0->bpb.RootDirEntries * sizeof(DIRENTRY)) % pSect0->bpb.BytesPerSector) ? 1 : 0);
    519521            }
    520522
     
    10891091      }
    10901092
    1091    RootDirSectors = ((pbpb->RootDirEntries * 32UL) + (pbpb->BytesPerSector-1UL)) / pbpb->BytesPerSector;
     1093   RootDirSectors = (((ULONG)pbpb->RootDirEntries * 32UL) + (pbpb->BytesPerSector-1UL)) / pbpb->BytesPerSector;
    10921094
    10931095   if (pbpb->SectorsPerFat)
  • trunk/src/include/fat32ifs.h

    r296 r297  
    223223ULONG     ulMaxEntry;
    224224USHORT    usEntriesPerBlock;
    225 USHORT    usBlockIndex;
    226 USHORT    usTotalBlocks;
     225ULONG     ulBlockIndex;
     226ULONG     ulTotalBlocks;
    227227BOOL      fLongNames;
    228228BYTE      bAttr;
  • trunk/src/ufat32/chkdsk.c

    r290 r297  
    498498      pCD->ulStartOfData    = pCD->BootSect.bpb.ReservedSectors +
    499499        pCD->BootSect.bpb.SectorsPerFat * pCD->BootSect.bpb.NumberOfFATs +
    500         (pCD->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY)) / pCD->BootSect.bpb.BytesPerSector;
     500        ((ULONG)pCD->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY)) / pCD->BootSect.bpb.BytesPerSector +
     501        ((((ULONG)pCD->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY)) % pCD->BootSect.bpb.BytesPerSector) ? 1 : 0);
    501502      }
    502503
  • trunk/src/ufat32/format.c

    r293 r297  
    492492    if (params->bFatType < FAT_TYPE_FAT32)
    493493        // root dir is excluded from user area on FAT12/FAT16
    494         UserAreaSize -= params->sectors_per_cluster; // ???!
     494        UserAreaSize -= (ULONG)dp.RootDirEnt * sizeof(DIRENTRY) / dp.BytesPerSect +
     495        (((ULONG)dp.RootDirEnt * sizeof(DIRENTRY) % dp.BytesPerSect) ? 1 : 0);
    495496
    496497    ClusterCount = UserAreaSize / params->sectors_per_cluster;
    497498
    498     if ( (ClusterCount >= FAT12_BAD_CLUSTER && params->bFatType == FAT_TYPE_FAT12) ||
    499          (ClusterCount >= FAT16_BAD_CLUSTER && params->bFatType == FAT_TYPE_FAT16) ||
    500          (ClusterCount >= FAT32_BAD_CLUSTER && params->bFatType == FAT_TYPE_FAT32) ||
    501 #ifdef EXFAT
    502          (ClusterCount >= EXFAT_BAD_CLUSTER && params->bFatType == FAT_TYPE_EXFAT) )
     499    if ( (ClusterCount - 2 >= FAT12_BAD_CLUSTER && params->bFatType == FAT_TYPE_FAT12) ||
     500         (ClusterCount - 2 >= FAT16_BAD_CLUSTER && params->bFatType == FAT_TYPE_FAT16) ||
     501         (ClusterCount - 2 >= FAT32_BAD_CLUSTER && params->bFatType == FAT_TYPE_FAT32) ||
     502#ifdef EXFAT
     503         (ClusterCount - 2 >= EXFAT_BAD_CLUSTER && params->bFatType == FAT_TYPE_EXFAT) )
    503504#else
    504505         FALSE )
Note: See TracChangeset for help on using the changeset viewer.