Merged from external project:
authorlottaviano <lottaviano@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 23 Nov 2010 15:20:32 +0000 (15:20 +0000)
committerlottaviano <lottaviano@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 23 Nov 2010 15:20:32 +0000 (15:20 +0000)
**********
r4565 | batt | 2010-11-23 15:05:35 +0100 (mar, 23 nov 2010) | 2 lines

Fix kblock_trim() behaviour wrt cached block.

**********

git-svn-id: https://src.develer.com/svnoss/bertos/trunk@4567 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/io/kblock.c
bertos/io/kblock.h

index 0f8ac27454172c76bac159dac3048ff028bdf394..9c21f56659b6e34a9f92c53bd8e35755395aba32 100644 (file)
@@ -100,7 +100,6 @@ INLINE void kblock_setDirty(struct KBlock *b, bool dirty)
 }
 
 
-
 size_t kblock_read(struct KBlock *b, block_idx_t idx, void *buf, size_t offset, size_t size)
 {
        ASSERT(b);
@@ -150,6 +149,20 @@ static bool kblock_loadPage(struct KBlock *b, block_idx_t idx)
 }
 
 
+int kblock_trim(struct KBlock *b, block_idx_t start, block_idx_t count)
+{
+       ASSERT(start + count <= b->blk_cnt);
+
+       if (!kblock_loadPage(b, start))
+               return EOF;
+
+       b->priv.blk_start += start;
+       b->priv.curr_blk = 0; // adjust logical address
+       b->blk_cnt = count;
+       return 0;
+}
+
+
 size_t kblock_write(struct KBlock *b, block_idx_t idx, const void *buf, size_t offset, size_t size)
 {
        ASSERT(b);
index 56a0bf78c4688b225abd70891b5aa36d5d912be1..f3542947c308c1453a4e44527a8a5ebcb93d3bde 100644 (file)
@@ -195,13 +195,9 @@ typedef struct KBlock
  * \param start The index of the start block for the limiting window in logical addressing units.
  * \param count The number of blocks to be used.
  *
+ * \return 0 if all is OK, EOF on errors.
  */
-INLINE void kblock_trim(struct KBlock *b, block_idx_t start, block_idx_t count)
-{
-       ASSERT(start + count <= b->blk_cnt);
-       b->priv.blk_start += start;
-       b->blk_cnt = count;
-}
+int kblock_trim(struct KBlock *b, block_idx_t start, block_idx_t count);
 
 
 #define KB_ASSERT_METHOD(b, method) \