mirror of
https://github.com/meshcore-dev/MeshCore.git
synced 2026-04-20 22:13:47 +00:00
Merge pull request #806 from oltaco/safer-lfs-traverse
Safer _countLfsBlock / _getLfsUsedBlockCount
This commit is contained in:
commit
4daad75f7d
1 changed files with 15 additions and 2 deletions
|
|
@ -42,12 +42,17 @@ static File openWrite(FILESYSTEM* fs, const char* filename) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
|
||||||
|
static uint32_t _ContactsChannelsTotalBlocks = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
void DataStore::begin() {
|
void DataStore::begin() {
|
||||||
#if defined(RP2040_PLATFORM)
|
#if defined(RP2040_PLATFORM)
|
||||||
identity_store.begin();
|
identity_store.begin();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
|
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
|
||||||
|
_ContactsChannelsTotalBlocks = _getContactsChannelsFS()->_getFS()->cfg->block_count;
|
||||||
checkAdvBlobFile();
|
checkAdvBlobFile();
|
||||||
#if defined(EXTRAFS) || defined(QSPIFLASH)
|
#if defined(EXTRAFS) || defined(QSPIFLASH)
|
||||||
migrateToSecondaryFS();
|
migrateToSecondaryFS();
|
||||||
|
|
@ -74,14 +79,22 @@ void DataStore::begin() {
|
||||||
|
|
||||||
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
|
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
|
||||||
int _countLfsBlock(void *p, lfs_block_t block){
|
int _countLfsBlock(void *p, lfs_block_t block){
|
||||||
|
if (block > _ContactsChannelsTotalBlocks) {
|
||||||
|
MESH_DEBUG_PRINTLN("ERROR: Block %d exceeds filesystem bounds - CORRUPTION DETECTED!", block);
|
||||||
|
return LFS_ERR_CORRUPT; // return error to abort lfs_traverse() gracefully
|
||||||
|
}
|
||||||
lfs_size_t *size = (lfs_size_t*) p;
|
lfs_size_t *size = (lfs_size_t*) p;
|
||||||
*size += 1;
|
*size += 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
lfs_ssize_t _getLfsUsedBlockCount(FILESYSTEM* fs) {
|
lfs_ssize_t _getLfsUsedBlockCount(FILESYSTEM* fs) {
|
||||||
lfs_size_t size = 0;
|
lfs_size_t size = 0;
|
||||||
lfs_traverse(fs->_getFS(), _countLfsBlock, &size);
|
int err = lfs_traverse(fs->_getFS(), _countLfsBlock, &size);
|
||||||
|
if (err) {
|
||||||
|
MESH_DEBUG_PRINTLN("ERROR: lfs_traverse() error: %d", err);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue