diff options
Diffstat (limited to 'src/bmp.cpp')
-rw-r--r-- | src/bmp.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/bmp.cpp b/src/bmp.cpp index a93785d4f..2cb3dbf78 100644 --- a/src/bmp.cpp +++ b/src/bmp.cpp @@ -25,18 +25,24 @@ void BmpInitializeBuffer(BmpBuffer *buffer, FILE *file) static inline void AdvanceBuffer(BmpBuffer *buffer) { + if (buffer->read < 0) return; + buffer->read = (int)fread(buffer->data, 1, BMP_BUFFER_SIZE, buffer->file); buffer->pos = 0; } static inline bool EndOfBuffer(BmpBuffer *buffer) { + if (buffer->read < 0) return false; + if (buffer->pos == buffer->read || buffer->pos < 0) AdvanceBuffer(buffer); return buffer->pos == buffer->read; } static inline byte ReadByte(BmpBuffer *buffer) { + if (buffer->read < 0) return 0; + if (buffer->pos == buffer->read || buffer->pos < 0) AdvanceBuffer(buffer); buffer->real_pos++; return buffer->data[buffer->pos++]; @@ -62,7 +68,9 @@ static inline void SkipBytes(BmpBuffer *buffer, int bytes) static inline void SetStreamOffset(BmpBuffer *buffer, int offset) { - fseek(buffer->file, offset, SEEK_SET); + if (fseek(buffer->file, offset, SEEK_SET) < 0) { + buffer->read = -1; + } buffer->pos = -1; buffer->real_pos = offset; AdvanceBuffer(buffer); |