Changeset 294


Ignore:
Timestamp:
Jul 17, 2017, 12:28:06 AM (3 years ago)
Author:
Valery V. Sedletski
Message:

fat32.ifs: exFAT fixes.

  • Add required parentheses in functions for calculating checksums. Now checksums should be ok.
  • Fix a bug with deleting file while renaming it.
File:
1 edited

Legend:

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

    r291 r294  
    905905         continue;
    906906
    907       chksum = (chksum << 15) | (chksum >> 1) + (USHORT)data[i];
     907      chksum = ((chksum << 15) | (chksum >> 1)) + (USHORT)data[i];
    908908      }
    909909
     
    917917
    918918   for (i = 0; i < bytes; i++)
    919       chksum = (chksum << 31) | (chksum >> 1) + (ULONG)data[i];
     919      chksum = ((chksum << 31) | (chksum >> 1)) + (ULONG)data[i];
    920920
    921921   return chksum;
     
    929929
    930930   for (i = 0; i < NameLen * 2; i++)
    931       hash = (hash << 15) | (hash >> 1) + data[i];
     931      hash = ((hash << 15) | (hash >> 1)) + data[i];
    932932
    933933   return hash;
     
    16781678                              Write previous cluster if LN start lies there
    16791679                           */
    1680                            //if (ulPrevCluster != pVolInfo->ulFatEof &&
    1681                            //   pLNStart < pDir2)
    1682                            //   {
    1683                            //   if (ulPrevCluster == 1)
    1684                            //      // reading root directory on FAT12/FAT16
    1685                            //      rc = WriteSector(pVolInfo, ulPrevSector + ulPrevBlock * usSectorsPerBlock, usSectorsPerBlock, (void *)pDirectory, usIOMode);
    1686                            //   else
    1687                            //      rc = WriteBlock(pVolInfo, ulPrevCluster, ulPrevBlock, pDirectory, usIOMode);
    1688                            //   if (rc)
    1689                            //      {
    1690                            //      free(pDirNew);
    1691                            //      free(pDirectory);
    1692                            //      return rc;
    1693                            //      }
    1694                            //   }
     1680                           if (ulPrevCluster != pVolInfo->ulFatEof &&
     1681                              pLNStart < pDir2)
     1682                              {
     1683                              //if (ulPrevCluster == 1)
     1684                              //   // reading root directory on FAT12/FAT16
     1685                              //   rc = WriteSector(pVolInfo, ulPrevSector + ulPrevBlock * usSectorsPerBlock, usSectorsPerBlock, (void *)pDirectory, usIOMode);
     1686                              //else
     1687                                 rc = WriteBlock(pVolInfo, ulPrevCluster, ulPrevBlock, pDirectory, usIOMode);
     1688                              if (rc)
     1689                                 {
     1690                                 free(pDirNew);
     1691                                 free(pDirectory);
     1692                                 return rc;
     1693                                 }
     1694                              }
    16951695
    16961696                           /*
     
    17151715                              usMode = MODIFY_DIR_INSERT;
    17161716                              ulCluster = ulDirCluster;
    1717                               ulBytesRemained = pVolInfo->BootSect.bpb.RootDirEntries * sizeof(DIRENTRY);
    17181717                              ulPrevCluster = pVolInfo->ulFatEof;
    17191718                              ulPrevSector = 0;
Note: See TracChangeset for help on using the changeset viewer.