void-packages/srcpkgs/libgdiplus/patches/libgdiplus0-giflib5.patch
2014-11-24 12:54:35 +01:00

147 lines
3.8 KiB
Diff

--- src/gifcodec.c
+++ src/gifcodec.c
@@ -39,8 +39,15 @@ GUID gdip_gif_image_format_guid = {0xb96
#include "gifcodec.h"
+#if !defined(GIFLIB_MAJOR) || GIFLIB_MAJOR < 5
/* giflib declares this incorrectly as EgifOpen */
extern GifFileType *EGifOpen(void *userData, OutputFunc writeFunc);
+#endif
+#if !defined(GIFLIB_MAJOR) || !(GIFLIB_MAJOR > 5 || \
+ (GIFLIB_MAJOR == 5 && GIFLIB_MINOR >= 1))
+# define DGifCloseFile(a, b) DGifCloseFile(a)
+# define EGifCloseFile(a, b) EGifCloseFile(a)
+#endif
/* Data structure used for callback */
typedef struct
@@ -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;