Region: allow the last 4096 byte block to be incomplete

This commit is contained in:
Matthias Schiffer 2019-12-14 23:17:51 +01:00
parent f0c08f78e0
commit 58f19e50b2
Signed by: neocturne
GPG key ID: 16EF3F64CB201D9C

View file

@ -26,6 +26,7 @@
#include "Region.hpp"
#include <cstring>
#include <fstream>
#include <iostream>
@ -56,7 +57,7 @@ Region::ChunkMap Region::processHeader(const uint8_t header[4096]) {
void Region::visitChunks(const char *filename, const ChunkVisitor &visitor) {
std::ifstream file;
file.exceptions(std::ios::failbit | std::ios::badbit);
file.exceptions(std::ios::badbit);
file.open(filename, std::ios::in | std::ios::binary);
ChunkMap chunkMap;
@ -71,7 +72,7 @@ void Region::visitChunks(const char *filename, const ChunkVisitor &visitor) {
bool seen[SIZE][SIZE] = {};
size_t i = 1, c = 0;
while (!file.eof()) {
while (!file.eof() && !file.fail()) {
auto it = chunkMap.find(i);
if (it == chunkMap.end()) {
file.ignore(4096);
@ -89,6 +90,7 @@ void Region::visitChunks(const char *filename, const ChunkVisitor &visitor) {
c++;
uint8_t buffer[len * 4096];
std::memset(buffer, 0, sizeof(buffer));
file.read((char *)buffer, len * 4096);
ChunkData chunk(Buffer(buffer, len * 4096));