Fork of Adam Green's library with .cpp fix for current compiler

Dependents:   MSCUsbHost mpod_nhk_english mpod_picasa_photoframe mpod_nhk_english_spxml ... more

Fork of FatFileSystem by Adam Green

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers MemFileSystem.h Source File

MemFileSystem.h

00001 /* mbed Microcontroller Library - MemFileSystem
00002  * Copyright (c) 2008, sford
00003  */
00004 
00005 
00006 #ifndef MBED_MEMFILESYSTEM_H
00007 #define MBED_MEMFILESYSTEM_H
00008 
00009 #include "FATFileSystem.h"
00010 
00011 namespace mbed {
00012 
00013 class MemFileSystem : public FATFileSystem {
00014 public:
00015 
00016     // 2000 sectors, each 512 bytes (malloced as required)
00017     char *sectors[2000];
00018 
00019     MemFileSystem(const char* name) : FATFileSystem(name) {
00020         memset(sectors, 0, sizeof(sectors));
00021     }
00022 
00023     virtual ~MemFileSystem() {
00024         for(int i = 0; i < 2000; i++) {
00025             if(sectors[i]) {
00026                 free(sectors[i]);
00027             }
00028         }
00029     }
00030 
00031     // read a sector in to the buffer, return 0 if ok
00032     virtual int disk_read(char *buffer, int sector) {
00033         if(sectors[sector] == 0) {
00034             // nothing allocated means sector is empty
00035             memset(buffer, 0, 512);
00036         } else {
00037             memcpy(buffer, sectors[sector], 512);
00038         }
00039         return 0;
00040     }
00041 
00042     // write a sector from the buffer, return 0 if ok
00043     virtual int disk_write(const char *buffer, int sector) {
00044         // if buffer is zero deallocate sector
00045         char zero[512];
00046         memset(zero, 0, 512);
00047         if(memcmp(zero, buffer, 512)==0) {
00048             if(sectors[sector] != 0) {
00049                 free(sectors[sector]);
00050                 sectors[sector] = 0;
00051             }
00052             return 0;
00053         }
00054         // else allocate a sector if needed, and write
00055         if(sectors[sector] == 0) {
00056             char *sec = (char*)malloc(512);
00057             if(sec==0) {
00058                 return 1; // out of memory
00059             }
00060             sectors[sector] = sec;
00061         }
00062         memcpy(sectors[sector], buffer, 512);
00063         return 0;
00064     }
00065         
00066     // return the number of sectors
00067     virtual int disk_sectors() {
00068         return sizeof(sectors)/sizeof(sectors[0]);
00069     }
00070 
00071 };
00072     
00073 }
00074 
00075 #endif