mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-09-14 15:16:40 +00:00
Merge pull request #2917 from jirogit/fix/regionmap-load-eof-handling
fix(RegionMap): load() returns actual read success instead of hardcoded true
This commit is contained in:
@@ -93,13 +93,15 @@ bool RegionMap::load(FILESYSTEM* _fs, const char* path) {
|
|||||||
while (num_regions < MAX_REGION_ENTRIES) {
|
while (num_regions < MAX_REGION_ENTRIES) {
|
||||||
auto r = ®ions[num_regions];
|
auto r = ®ions[num_regions];
|
||||||
|
|
||||||
success = file.read((uint8_t *) &r->id, sizeof(r->id)) == sizeof(r->id);
|
int n = file.read((uint8_t *) &r->id, sizeof(r->id));
|
||||||
|
if (n == 0) break; // clean EOF
|
||||||
|
success = (n == sizeof(r->id));
|
||||||
success = success && file.read((uint8_t *) &r->parent, sizeof(r->parent)) == sizeof(r->parent);
|
success = success && file.read((uint8_t *) &r->parent, sizeof(r->parent)) == sizeof(r->parent);
|
||||||
success = success && file.read((uint8_t *) r->name, sizeof(r->name)) == sizeof(r->name);
|
success = success && file.read((uint8_t *) r->name, sizeof(r->name)) == sizeof(r->name);
|
||||||
success = success && file.read((uint8_t *) &r->flags, sizeof(r->flags)) == sizeof(r->flags);
|
success = success && file.read((uint8_t *) &r->flags, sizeof(r->flags)) == sizeof(r->flags);
|
||||||
success = success && file.read(pad, sizeof(pad)) == sizeof(pad);
|
success = success && file.read(pad, sizeof(pad)) == sizeof(pad);
|
||||||
|
|
||||||
if (!success) break; // EOF
|
if (!success) break; // partial read or corruption
|
||||||
|
|
||||||
if (r->id >= next_id) { // make sure next_id is valid
|
if (r->id >= next_id) { // make sure next_id is valid
|
||||||
next_id = r->id + 1;
|
next_id = r->id + 1;
|
||||||
@@ -108,7 +110,7 @@ bool RegionMap::load(FILESYSTEM* _fs, const char* path) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
file.close();
|
file.close();
|
||||||
return true;
|
return success;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false; // failed
|
return false; // failed
|
||||||
|
|||||||
Reference in New Issue
Block a user