--- ./src/gifcodec.c.orig 2013-03-03 12:43:38.113264271 +0000 +++ ./src/gifcodec.c 2013-03-03 14:47:26.708290541 +0000 @@ -39,9 +39,6 @@ #include "gifcodec.h" -/* giflib declares this incorrectly as EgifOpen */ -extern GifFileType *EGifOpen(void *userData, OutputFunc writeFunc); - /* Data structure used for callback */ typedef struct { @@ -105,7 +102,7 @@ */ static int -AddExtensionBlockMono(SavedImage *New, int Len, BYTE ExtData[]) +AddExtensionBlockMono(SavedImage *New, int ExtCode, int Len, BYTE ExtData[]) { ExtensionBlock *ep; @@ -129,7 +126,7 @@ if (ExtData) { memcpy(ep->Bytes, ExtData, Len); - ep->Function = New->Function; + ep->Function = ExtCode; } return (GIF_OK); @@ -232,20 +229,20 @@ } case EXTENSION_RECORD_TYPE: { - if (DGifGetExtension(GifFile, &temp_save.Function, &ExtData) == GIF_ERROR) { + int ExtCode; + if (DGifGetExtension(GifFile, &ExtCode, &ExtData) == GIF_ERROR) { return (GIF_ERROR); } while (ExtData != NULL) { /* Create an extension block with our data */ - if (AddExtensionBlockMono(&temp_save, ExtData[0], &ExtData[1]) == GIF_ERROR) { + if (AddExtensionBlockMono(&temp_save, ExtCode, ExtData[0], &ExtData[1]) == GIF_ERROR) { return (GIF_ERROR); } - + if (DGifGetExtensionNext(GifFile, &ExtData) == GIF_ERROR) { return (GIF_ERROR); } - temp_save.Function = 0; } break; } @@ -304,9 +301,9 @@ loop_counter = FALSE; if (from_file) { - gif = DGifOpen(stream, &gdip_gif_fileinputfunc); + gif = DGifOpen(stream, &gdip_gif_fileinputfunc,NULL); } else { - gif = DGifOpen (stream, &gdip_gif_inputfunc); + gif = DGifOpen (stream, &gdip_gif_inputfunc,NULL); } if (gif == NULL) { @@ -661,9 +658,9 @@ } if (from_file) { - fp = EGifOpenFileName (stream, 0); + fp = EGifOpenFileName (stream, 0, NULL); } else { - fp = EGifOpen (stream, gdip_gif_outputfunc); + fp = EGifOpen (stream, gdip_gif_outputfunc,NULL); } if (!fp) { @@ -702,7 +699,7 @@ goto error; } - cmap = MakeMapObject(cmap_size, 0); + cmap = GifMakeMapObject(cmap_size, 0); pixbuf = GdipAlloc(pixbuf_size); if (pixbuf == NULL) { @@ -793,7 +790,7 @@ pixbuf = pixbuf_org; } else { cmap_size = 256; - cmap = MakeMapObject (cmap_size, 0); + cmap = GifMakeMapObject (cmap_size, 0); red = GdipAlloc(pixbuf_size); green = GdipAlloc(pixbuf_size); @@ -824,13 +821,13 @@ v += 4; } } - if (QuantizeBuffer(bitmap_data->width, bitmap_data->height, &cmap_size, + if (GifQuantizeBuffer(bitmap_data->width, bitmap_data->height, &cmap_size, red, green, blue, pixbuf, cmap->Colors) == GIF_ERROR) { goto error; } } - cmap->BitsPerPixel = BitSize (cmap_size); + cmap->BitsPerPixel = GifBitSize (cmap_size); cmap->ColorCount = 1 << cmap->BitsPerPixel; if ((frame == 0) && (k == 0)) { @@ -848,8 +845,10 @@ Buffer[0] = 1; Buffer[1] = ptr[0]; Buffer[2] = ptr[1]; - EGifPutExtensionFirst(fp, APPLICATION_EXT_FUNC_CODE, 11, "NETSCAPE2.0"); - EGifPutExtensionLast(fp, APPLICATION_EXT_FUNC_CODE, 3, Buffer); + EGifPutExtensionLeader(fp, APPLICATION_EXT_FUNC_CODE); + EGifPutExtensionBlock(fp, 11, "NETSCAPE2.0"); + EGifPutExtensionBlock(fp, 3, Buffer); + EGifPutExtensionTrailer(fp); } } @@ -901,7 +900,7 @@ pixbuf += bitmap_data->width; } - FreeMapObject (cmap); + GifFreeMapObject (cmap); if (red != NULL) { GdipFree (red); } @@ -929,7 +928,7 @@ error: if (cmap != NULL) { - FreeMapObject (cmap); + GifFreeMapObject (cmap); } if (red != NULL) {