void EFile::rm(uint8_t i_fileId){ uint8_t i = eeFs->files[i_fileId].startBlk; memset(&(eeFs->files[i_fileId]), 0, sizeof(eeFs->files[i_fileId])); EeFsFlush(); //chained out if(i) EeFsFree( i ); //chain in }
void EFile::swap(uint8_t i_fileId1,uint8_t i_fileId2) { DirEnt tmp = eeFs->files[i_fileId1]; eeFs->files[i_fileId1] = eeFs->files[i_fileId2]; eeFs->files[i_fileId2] = tmp;; EeFsFlush(); }
void EFile::closeTrunc() { uint8_t fri=0; eeFs->files[m_fileId].size = m_pos; if(m_currBlk && ( fri = EeFsGetLink(m_currBlk))) EeFsSetLink(m_currBlk, 0); EeFsFlush(); //chained out if(fri) EeFsFree( fri ); //chain in }
int8_t EFile::EeFsck() { uint8_t *bufp; static uint8_t buffer[BLOCKS]; bufp = buffer; memset(bufp,0,BLOCKS); uint8_t blk ; int8_t ret=0; for(uint8_t i = 0; i <= MAXFILES; i++){ uint8_t *startP = i==MAXFILES ? &(eeFs->freeList) : &(eeFs->files[i].startBlk); uint8_t lastBlk = 0; blk = *startP; //if(i == MAXFILES) blk = eeFs->freeList; // else blk = eeFs->files[i].startBlk; while(blk){ // if(blk < FIRSTBLK ) goto err_1; //bad blk index // if(blk >= BLOCKS ) goto err_2; //bad blk index // if(bufp[blk]) goto err_3; //blk double usage if( ( blk < FIRSTBLK ) //goto err_1; //bad blk index || (blk >= BLOCKS ) //goto err_2; //bad blk index || (bufp[blk] ))//goto err_3; //blk double usage { if(lastBlk){ EeFsSetLink(lastBlk,0); }else{ *startP = 0; //interrupt chain at startpos EeFsFlush(); } blk=0; //abort }else{ bufp[blk] = i+1; lastBlk = blk; blk = EeFsGetLink(blk); } } } for(blk = FIRSTBLK; blk < BLOCKS; blk++){ if(bufp[blk]==0) { //goto err_4; //unused block EeFsSetLink(blk,eeFs->freeList); eeFs->freeList = blk; //chain in front EeFsFlushFreelist(); } } // if(0){ //err_4: ret--; //err_3: ret--; // err_2: ret--; // err_1: ret--; // } return ret; }
void EFile::EeFsFormat() { // if(sizeof(eeFs) != RESV){ // extern void eeprom_RESV_mismatch(); // eeprom_RESV_mismatch(); // } memset(eeFs,0, sizeof(EeFs)); eeFs->version = EEFS_VERS; eeFs->mySize = sizeof(EeFs); eeFs->freeList = 0; eeFs->bs = BS; for(uint8_t i = FIRSTBLK; i < BLOCKS; i++) EeFsSetLink(i,i+1); EeFsSetLink(BLOCKS-1, 0); eeFs->freeList = FIRSTBLK; EeFsFlush(); }
void EeFsFormat() { ENABLE_SYNC_WRITE(true); memclear(&eeFs, sizeof(eeFs)); eeFs.version = EEFS_VERS; eeFs.mySize = sizeof(eeFs); eeFs.freeList = 0; eeFs.bs = BS; for (blkid_t i=FIRSTBLK; i<BLOCKS-1; i++) { EeFsSetLink(i, i+1); } EeFsSetLink(BLOCKS-1, 0); eeFs.freeList = FIRSTBLK; #if defined(PCBTARANIS) freeBlocks = BLOCKS; #endif EeFsFlush(); ENABLE_SYNC_WRITE(false); }
void EeFsFormat() { ENABLE_SYNC_WRITE(true); memclear(&eeFs, sizeof(eeFs)); eeFs.version = EEFS_VERS; eeFs.mySize = sizeof(eeFs); eeFs.freeList = 0; eeFs.bs = BS; for (blkidL_t i=FIRSTBLK; i<BLOCKS-1 ; i++) { EeFsSetLink(i, i+1) ; wdt_reset() ; } EeFsSetLink(BLOCKS-1, 0); eeFs.freeList = FIRSTBLK; freeBlocks = BLOCKS ; EeFsFlush(); ENABLE_SYNC_WRITE(false); }
int8_t EeFsck() { ENABLE_SYNC_WRITE(true); uint8_t *bufp = (uint8_t *)&g_model; memclear(bufp, BLOCKS); blkid_t blk ; #if defined(PCBTARANIS) blkid_t blocksCount; #endif for (uint8_t i=0; i<=MAXFILES; i++) { #if defined(PCBTARANIS) blocksCount = 0; #endif blkid_t *startP = (i==MAXFILES ? &eeFs.freeList : &eeFs.files[i].startBlk); blkid_t lastBlk = 0; blk = *startP; while (blk) { if (blk < FIRSTBLK || // bad blk index blk >= BLOCKS || // bad blk indexchan bufp[blk]) // blk double usage { if (lastBlk) { EeFsSetLink(lastBlk, 0); } else { *startP = 0; // interrupt chain at startpos EeFsFlush(); } blk = 0; // abort } else { #if defined(PCBTARANIS) blocksCount++; #endif bufp[blk] = i+1; lastBlk = blk; blk = EeFsGetLink(blk); } } } #if defined(PCBTARANIS) freeBlocks = blocksCount; #endif for (blk=FIRSTBLK; blk<BLOCKS; blk++) { if (!bufp[blk]) { // unused block #if defined(PCBTARANIS) freeBlocks++; #endif EeFsSetLink(blk, eeFs.freeList); eeFs.freeList = blk; // chain in front EeFsFlushFreelist(); } } ENABLE_SYNC_WRITE(false); return 0; }