{
unsigned char c;
struct binbuffer *image;
+ int image_buffered = 0;
if (NULL == src || NULL == dst)
{
* Image block: Extract to current image buffer.
*/
case 0x2c:
- image->offset = 0;
+ if (image_buffered == 1)
+ {
+ /* Discard previous image. */
+ image->offset = 0;
+ image_buffered = 0;
+ }
if (gif_extract_image(src, image)) goto failed;
+ image_buffered = 1;
if (get_first_image) goto write;
continue;
switch (buf_getbyte(src, 1))
{
/*
- * Image extension: Copy extension header and image
- * to the current image buffer
+ * Image extension: Copy extension header
+ * and continue looking for new blocks.
*/
case 0xf9:
- image->offset = 0;
- if (buf_copy(src, image, 8) || buf_getbyte(src, 0) != 0x2c) goto failed;
- if (gif_extract_image(src, image)) goto failed;
- if (get_first_image) goto write;
+ if (image_buffered == 1)
+ {
+ image->offset = 0;
+ image_buffered = 0;
+ }
+ if (buf_copy(src, image, 8)) goto failed;
continue;
/*