Add more tests; handle end of disk space correctly.
[bertos.git] / bertos / fs / battfs.c
index f85d8c96bedaf48e7efd99d3325e7d07e1c8e0f0..7d30231f68726c0f4f03299780a27ba038f785e5 100644 (file)
@@ -514,7 +514,7 @@ bool battfs_init(struct BattFsSuper *disk)
  */
 bool battfs_fsck(struct BattFsSuper *disk)
 {
-       #define FSCHECK(cond) do { if(!(cond)) { LOG_ERR("\"" #cond "\"\n"); return false } } while (0)
+       #define FSCHECK(cond) do { if(!(cond)) { LOG_ERR("\"" #cond "\"\n"); return false; } } while (0)
 
        FSCHECK(disk->free_page_start <= disk->page_count);
        FSCHECK(disk->data_size < disk->page_size);
@@ -559,7 +559,7 @@ bool battfs_fsck(struct BattFsSuper *disk)
 
        FSCHECK(page_used == disk->free_page_start);
        FSCHECK(free_bytes == disk->free_bytes);
-       FSCHECK(files < BATTFS_MAX_FILES);
+
        return true;
 }
 
@@ -593,10 +593,10 @@ static int battfs_fileclose(struct KFile *fd)
 
 static bool getNewPage(struct BattFsSuper *disk, pgcnt_t new_pos, inode_t inode, pgoff_t pgoff, BattFsPageHeader *new_hdr)
 {
-       if (disk->free_page_start >= disk->page_count)
+       if (SPACE_OVER(disk))
        {
                #warning TODO space over!
-               LOG_INFO("No disk space available\n");
+               LOG_ERR("No disk space available!\n");
                return false;
        }
        flushBuffer(disk);
@@ -724,6 +724,11 @@ static size_t battfs_write(struct KFile *fd, const void *_buf, size_t size)
                /* Handle cache load of a new page*/
                else if (fdb->start[pg_offset] != fdb->disk->curr_page)
                {
+                       if (SPACE_OVER(fdb->disk))
+                       {
+                               LOG_ERR("No disk space available!\n");
+                               return total_write;
+                       }
                        LOG_INFO("Re-writing page %d to %d\n", fdb->start[pg_offset], fdb->disk->page_array[fdb->disk->free_page_start]);
                        if (!loadPage(fdb->disk, fdb->start[pg_offset], &curr_hdr))
                        {
@@ -743,7 +748,6 @@ static size_t battfs_write(struct KFile *fd, const void *_buf, size_t size)
                        curr_hdr.seq++;
                }
 
-
                //LOG_INFO("writing to buffer for page %d, offset %d, size %d\n", fdb->disk->curr_page, addr_offset, wr_len);
                if (fdb->disk->bufferWrite(fdb->disk, addr_offset, buf, wr_len) != wr_len)
                {