|
@@ -108,7 +108,7 @@ RECENT REVISION HISTORY:
|
|
|
Julian Raschke Gregory Mullen Baldur Karlsson github:poppolopoppo
|
|
|
Christian Floisand Kevin Schmidt JR Smith github:darealshinji
|
|
|
Brad Weinberger Matvey Cherevko Luca Sas github:Michaelangel007
|
|
|
- Blazej Dariusz Roszkowski Alexander Veselov
|
|
|
+ Blazej Dariusz Roszkowski Alexander Veselov Zack Middleton
|
|
|
*/
|
|
|
|
|
|
#ifndef STBI_INCLUDE_STB_IMAGE_H
|
|
@@ -751,6 +751,7 @@ typedef struct
|
|
|
int read_from_callbacks;
|
|
|
int buflen;
|
|
|
stbi_uc buffer_start[128];
|
|
|
+ int callback_already_read;
|
|
|
|
|
|
stbi_uc *img_buffer, *img_buffer_end;
|
|
|
stbi_uc *img_buffer_original, *img_buffer_original_end;
|
|
@@ -764,6 +765,7 @@ static void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int len)
|
|
|
{
|
|
|
s->io.read = NULL;
|
|
|
s->read_from_callbacks = 0;
|
|
|
+ s->callback_already_read = 0;
|
|
|
s->img_buffer = s->img_buffer_original = (stbi_uc *) buffer;
|
|
|
s->img_buffer_end = s->img_buffer_original_end = (stbi_uc *) buffer+len;
|
|
|
}
|
|
@@ -775,7 +777,8 @@ static void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c, void *
|
|
|
s->io_user_data = user;
|
|
|
s->buflen = sizeof(s->buffer_start);
|
|
|
s->read_from_callbacks = 1;
|
|
|
- s->img_buffer_original = s->buffer_start;
|
|
|
+ s->callback_already_read = 0;
|
|
|
+ s->img_buffer = s->img_buffer_original = s->buffer_start;
|
|
|
stbi__refill_buffer(s);
|
|
|
s->img_buffer_original_end = s->img_buffer_end;
|
|
|
}
|
|
@@ -1499,6 +1502,7 @@ enum
|
|
|
static void stbi__refill_buffer(stbi__context *s)
|
|
|
{
|
|
|
int n = (s->io.read)(s->io_user_data,(char*)s->buffer_start,s->buflen);
|
|
|
+ s->callback_already_read += (int) (s->img_buffer - s->img_buffer_original);
|
|
|
if (n == 0) {
|
|
|
// at end of file, treat same as if from memory, but need to handle case
|
|
|
// where s->img_buffer isn't pointing to safe memory, e.g. 0-byte file
|
|
@@ -5324,7 +5328,7 @@ static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req
|
|
|
psize = (info.offset - info.extra_read - info.hsz) >> 2;
|
|
|
}
|
|
|
if (psize == 0) {
|
|
|
- STBI_ASSERT(info.offset == (s->img_buffer - s->buffer_start));
|
|
|
+ STBI_ASSERT(info.offset == s->callback_already_read + (int) (s->img_buffer - s->img_buffer_original));
|
|
|
}
|
|
|
|
|
|
if (info.bpp == 24 && ma == 0xff000000)
|