Prechádzať zdrojové kódy

Fix cache flush/invalidate bug

Bill Greiman 7 rokov pred
rodič
commit
a713da6cf5
1 zmenil súbory, kde vykonal 8 pridanie a 8 odobranie
  1. 8 8
      src/FatLib/FatFile.cpp

+ 8 - 8
src/FatLib/FatFile.cpp

@@ -779,7 +779,7 @@ int FatFile::read(void* buf, size_t nbyte) {
         }
       }
       n = 512*nb;
-      if (block <= m_vol->cacheBlockNumber()
+      if (m_vol->cacheBlockNumber() <= block
           && block < (m_vol->cacheBlockNumber() + nb)) {
         // flush cache if a block is in the cache
         if (!m_vol->cacheSyncData()) {
@@ -1444,17 +1444,17 @@ int FatFile::write(const void* buf, size_t nbyte) {
     } else if (nToWrite >= 1024) {
       // use multiple block write command
       uint8_t maxBlocks = m_vol->blocksPerCluster() - blockOfCluster;
-      size_t nBlock = nToWrite >> 9;
-      if (nBlock > maxBlocks) {
-        nBlock = maxBlocks;
+      size_t nb = nToWrite >> 9;
+      if (nb > maxBlocks) {
+        nb = maxBlocks;
       }
-      n = 512*nBlock;
-      if (block <= m_vol->cacheBlockNumber()
-          && block < (m_vol->cacheBlockNumber() + nBlock)) {
+      n = 512*nb;
+      if (m_vol->cacheBlockNumber() <= block
+          && block < (m_vol->cacheBlockNumber() + nb)) {
         // invalidate cache if block is in cache
         m_vol->cacheInvalidate();
       }
-      if (!m_vol->writeBlocks(block, src, nBlock)) {
+      if (!m_vol->writeBlocks(block, src, nb)) {
         DBG_FAIL_MACRO;
         goto fail;
       }