123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- ---
- src/gifcodec.c | 50 +++++++++++++++++++++++++++++++++++++++++---------
- 1 file changed, 41 insertions(+), 9 deletions(-)
- Index: libgdiplus-2.10.9/src/gifcodec.c
- ===================================================================
- --- libgdiplus-2.10.9.orig/src/gifcodec.c
- +++ libgdiplus-2.10.9/src/gifcodec.c
- @@ -105,7 +112,7 @@ gdip_gif_inputfunc (GifFileType *gif, Gi
- */
-
- static int
- -AddExtensionBlockMono(SavedImage *New, int Len, BYTE ExtData[])
- +AddExtensionBlockMono(SavedImage *New, int Len, int func, BYTE ExtData[])
- {
- ExtensionBlock *ep;
-
- @@ -129,7 +136,7 @@ AddExtensionBlockMono(SavedImage *New, i
-
- if (ExtData) {
- memcpy(ep->Bytes, ExtData, Len);
- - ep->Function = New->Function;
- + ep->Function = func;
- }
-
- return (GIF_OK);
- @@ -232,20 +239,20 @@ DGifSlurpMono(GifFileType * GifFile, Sav
- }
-
- case EXTENSION_RECORD_TYPE: {
- - if (DGifGetExtension(GifFile, &temp_save.Function, &ExtData) == GIF_ERROR) {
- + int func;
- + if (DGifGetExtension(GifFile, &func, &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, func, ExtData[0], &ExtData[1]) == GIF_ERROR) {
- return (GIF_ERROR);
- }
-
- if (DGifGetExtensionNext(GifFile, &ExtData) == GIF_ERROR) {
- return (GIF_ERROR);
- }
- - temp_save.Function = 0;
- }
- break;
- }
- @@ -303,12 +310,19 @@ gdip_load_gif_image (void *stream, GpIma
- result = NULL;
- loop_counter = FALSE;
-
- +#if GIFLIB_MAJOR < 5
- if (from_file) {
- gif = DGifOpen(stream, &gdip_gif_fileinputfunc);
- } else {
- gif = DGifOpen (stream, &gdip_gif_inputfunc);
- }
- -
- +#else
- + if (from_file)
- + gif = DGifOpen(stream, &gdip_gif_fileinputfunc, NULL);
- + else
- + gif = DGifOpen(stream, &gdip_gif_inputfunc, NULL);
- +#endif
- +
- if (gif == NULL) {
- goto error;
- }
- @@ -581,7 +595,7 @@ gdip_load_gif_image (void *stream, GpIma
- }
-
- FreeExtensionMono(&global_extensions);
- - DGifCloseFile (gif);
- + DGifCloseFile (gif, NULL);
-
- *image = result;
- return Ok;
- @@ -597,7 +611,7 @@ error:
-
- if (gif != NULL) {
- FreeExtensionMono (&global_extensions);
- - DGifCloseFile (gif);
- + DGifCloseFile (gif, NULL);
- }
-
- *image = NULL;
- @@ -660,11 +674,22 @@ gdip_save_gif_image (void *stream, GpIma
- return InvalidParameter;
- }
-
- +#if GIFLIB_MAJOR < 5
- if (from_file) {
- fp = EGifOpenFileName (stream, 0);
- } else {
- fp = EGifOpen (stream, gdip_gif_outputfunc);
- }
- +#else
- + if (from_file)
- + fp = EGifOpenFileName (stream, 0, NULL);
- + else
- + fp = EGifOpen (stream, gdip_gif_outputfunc, NULL);
- +#define MakeMapObject GifMakeMapObject
- +#define FreeMapObject GifFreeMapObject
- +#define QuantizeBuffer GifQuantizeBuffer
- +#define BitSize GifBitSize
- +#endif
-
- if (!fp) {
- return FileNotFound;
- @@ -848,8 +873,15 @@ gdip_save_gif_image (void *stream, GpIma
- Buffer[0] = 1;
- Buffer[1] = ptr[0];
- Buffer[2] = ptr[1];
- +#if GIFLIB_MAJOR < 5
- EGifPutExtensionFirst(fp, APPLICATION_EXT_FUNC_CODE, 11, "NETSCAPE2.0");
- EGifPutExtensionLast(fp, APPLICATION_EXT_FUNC_CODE, 3, Buffer);
- +#else
- + EGifPutExtensionLeader(fp, APPLICATION_EXT_FUNC_CODE);
- + EGifPutExtensionBlock(fp, 11, "NETSCAPE2.0");
- + EGifPutExtensionBlock(fp, 3, Buffer);
- + EGifPutExtensionTrailer(fp);
- +#endif
- }
- }
-
- @@ -923,7 +955,7 @@ gdip_save_gif_image (void *stream, GpIma
- }
- }
-
- - EGifCloseFile (fp);
- + EGifCloseFile (fp, NULL);
-
- return Ok;
|