Examples for mFS.

Dependencies:   mbed

Revision:
3:fa4e0fea475b
Parent:
2:a608de004dcf
diff -r a608de004dcf -r fa4e0fea475b main.cpp
--- a/main.cpp	Tue Feb 22 21:40:00 2011 +0000
+++ b/main.cpp	Thu Feb 24 00:02:58 2011 +0000
@@ -13,7 +13,7 @@
     pc.printf("\n\r\n\r[mFS] Formatting... %u bad block headers.\n\r", fs.mkfs(true)); // Quick format EEPROM
 
     // Mark block 2 as bad
-    fs.write((char[]){'\x00','\x00','\x00'}, 2, 0, 3);
+    fs.write((char[]){'\x00','\x00','\x00', '\x00', '\x00'}, 2, 0, 3);
     pc.printf("Block 2 marked as a bad block.\n\r");
 
     fs.read(data, 0, 0, 1);
@@ -26,32 +26,32 @@
     pc.printf("Create file new.txt: "); printStatus(fs.createFile("new.txt"));
     
     // Try to write multi block file new.txt 
-    file *fp3 = new file(&fs, "new.txt", 1);
-    pc.printf("Trying to write multi block file new.txt...\n\r");
-    for (n=0; n < (BS-4)-20-1; n++)
-        fp3->write("b", 1);
+    file *fp3 = new file(&fs, "new.txt", AWRITE);
+    pc.printf("Trying to write multi-block file new.txt...\n\r");
+    for (n=0; n < BS; n++)
+        fp3->write("F", 1);
     
     pc.printf("Create file testi.txt: "); printStatus(fs.createFile("testi.txt"));
-    file *fp = new file(&fs, "testi.txt", 1);
+    file *fp = new file(&fs, "testi.txt", AWRITE);
     pc.printf("File new.txt opened successfully\n\r");
     fp->write("The quick brown fox jumps over the lazy dog", 44);
     pc.printf("File write OK\n\r");
     fp->flush(); 
     
     pc.printf("Continue to write new.txt...");
-    for (n=0; n < 40; n++)
-        fp3->write("u", 1);
+    for (n=0; n < 400; n++)
+        fp3->write("S", 1);
     pc.printf(" End\n\r");
     
     fp3->rewind();
-    fp3->read(buf, 1);
+    fp3->read(buf, 20);
     pc.printf("Rewind test (new.txt): %s\n\r", buf);
-    fp3->forward(BS-20);
-    fp3->read(buf, 1);
+    pc.printf("Forwarding new.txt: "); printStatus(fp3->forward(BS-25-22));
+    fp3->read(buf, 43);
     pc.printf("Forward test (new.txt): %s\n\r", buf);
     delete fp3;
 
-    pc.printf("Create file ykaa.txt: "); printStatus(fs.createFile("yykaa.txt"));
+    pc.printf("Create file yykaa.txt: "); printStatus(fs.createFile("yykaa.txt"));
 
     fp->rewind();
     fp->read(buf, 44);
@@ -59,7 +59,7 @@
     delete fp;
 
     // Open read-only file
-    file *fp2 = new file(&fs, "koe.txt", 0); /* Keep in mind that error will  *
+    file *fp2 = new file(&fs, "koe.txt", RO); /* Keep in mind that error will  *
                                              * be thrown if RO file is       *
                                               * opened in RW mode. So it's    *
                                               * better to check flags before  *
@@ -76,6 +76,15 @@
 
     ls(&fs);
     listReservedBlocks(&fs);
+    
+    fs.setFileFlags(0, "new.txt");
+    file *fp4 = new file(&fs, "new.txt", DWRITE);
+    pc.printf("Trying destructive write with new.txt... ");
+    for (n=0; n < 3*(BS-25); n++)
+        fp3->write("*", 1);
+    pc.printf("End\n\r");
+    listReservedBlocks(&fs);
+    
 }
 
 /** Lists files stored in file system
@@ -103,9 +112,9 @@
                 pc.printf(" ");
             pc.printf("%X\t%X\n\r", n, flags[0]);
         } else break; // Reach end of fs
+        fileCount++;
         next:
         n++;
-        fileCount++;
     }
 
     // Get number of free blocks
@@ -113,7 +122,7 @@
     // Calculate amount of space used
     unsigned int iSpaceUsed = VOL_SIZE - (iFreeBlocks*BS);
     // Summary
-    pc.printf("%u files total\n\r%u/%u kB space used, %u blocks free\n\r\n\r", fileCount-1, iSpaceUsed/1024, VOL_SIZE/1024, iFreeBlocks);
+    pc.printf("%u files total\n\r%u/%u kB space used, %u blocks free\n\r\n\r", fileCount, iSpaceUsed/1024, VOL_SIZE/1024, iFreeBlocks);
 }
 
 /** Lists blocks marked as used
@@ -122,14 +131,14 @@
 */
 void listReservedBlocks(mfs *fs)
 {
-    char data[3];
+    char data[5];
     
-    pc.printf("\n\rReserved blocks:\n\r");
+    pc.printf("\n\rReserved blocks and list of related links:\n\r");
     for (unsigned int n=0; n < BC; n++)
     {
-        fs->read(data, n, 0, 3);
+        fs->read(data, n, 0, 5);
         if (data[0] != 4)
-            pc.printf("b%XB0: %X, %X, %X\n\r", n, data[0], data[1], data[2]);
+            pc.printf("b%XB0: %X, %X, %X\n\r", n, data[0], data[1]<<8|data[2], data[3]<<8|data[4]);
     }
 }