summaryrefslogtreecommitdiffstats
path: root/graphics/exact-image/exact-image-giflib.patch
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/exact-image/exact-image-giflib.patch')
-rw-r--r--graphics/exact-image/exact-image-giflib.patch139
1 files changed, 139 insertions, 0 deletions
diff --git a/graphics/exact-image/exact-image-giflib.patch b/graphics/exact-image/exact-image-giflib.patch
new file mode 100644
index 0000000000..f15c7ad717
--- /dev/null
+++ b/graphics/exact-image/exact-image-giflib.patch
@@ -0,0 +1,139 @@
+--- exact-image-0.8.9/codecs/gif.cc.orig 2010-03-03 22:04:44.000000000 +0100
++++ exact-image-0.8.9/codecs/gif.cc 2014-10-20 16:45:48.021255431 +0200
+@@ -17,6 +17,12 @@
+
+ #include <gif_lib.h>
+
++#if (GIFLIB_MAJOR > 5) || (GIFLIB_MINOR >= 1)
++#define Internal_EGifCloseFile(f) EGifCloseFile(f, NULL)
++#else
++#define Internal_EGifCloseFile(f) EGifCloseFile(f)
++#endif
++
+ #include "gif.hh"
+ #include "Colorspace.hh"
+
+@@ -58,11 +64,11 @@
+ GifRecordType RecordType;
+ GifByteType* Extension;
+ ColorMapObject *ColorMap = NULL;
+- int ExtCode;
++ int ExtCode, GifError;
+
+- if ((GifFile = DGifOpen (stream, &GIFInputFunc)) == NULL)
++ if ((GifFile = DGifOpen (stream, &GIFInputFunc, &GifError)) == NULL)
+ {
+- PrintGifError();
++ std::cerr << "Error: " << GifErrorString(GifError) << std::endl;
+ return false;
+ }
+
+@@ -74,7 +80,7 @@
+ /* Scan the content of the GIF file and load the image(s) in: */
+ do {
+ if (DGifGetRecordType(GifFile, &RecordType) == GIF_ERROR) {
+- PrintGifError();
++ std::cerr << "DGifGetRecordType error: " << GifErrorString(GifFile->Error) << std::endl;
+ return false;
+ }
+
+@@ -83,7 +89,7 @@
+ switch (RecordType) {
+ case IMAGE_DESC_RECORD_TYPE:
+ if (DGifGetImageDesc(GifFile) == GIF_ERROR) {
+- PrintGifError();
++ std::cerr << "DGifGetImageDesc error: " << GifErrorString(GifFile->Error) << std::endl;
+ return false;
+ }
+
+@@ -104,7 +110,7 @@
+ j += InterlacedJumps[i]) {
+ if (DGifGetLine(GifFile, &image.getRawData()[j*image.stride()+Col],
+ Width) == GIF_ERROR) {
+- PrintGifError();
++ std::cerr << "DGifGetLine error: " << GifErrorString(GifFile->Error) << std::endl;
+ return false;
+ }
+ }
+@@ -113,7 +119,7 @@
+ for (int i = 0; i < Height; ++i) {
+ if (DGifGetLine(GifFile, &image.getRawData()[Row++ * image.stride()+Col],
+ Width) == GIF_ERROR) {
+- PrintGifError();
++ std::cerr << "DGifGetLine error: " << GifErrorString(GifFile->Error) << std::endl;
+ return false;
+ }
+ }
+@@ -122,12 +128,12 @@
+ case EXTENSION_RECORD_TYPE:
+ /* Skip any extension blocks in file: */
+ if (DGifGetExtension(GifFile, &ExtCode, &Extension) == GIF_ERROR) {
+- PrintGifError();
++ std::cerr << "DGifGetExtension error: " << GifErrorString(GifFile->Error) << std::endl;
+ return false;
+ }
+ while (Extension != NULL) {
+ if (DGifGetExtensionNext(GifFile, &Extension) == GIF_ERROR) {
+- PrintGifError();
++ std::cerr << "DGifGetExtensionNext error: " << GifErrorString(GifFile->Error) << std::endl;
+ return false;
+ }
+ }
+@@ -155,7 +161,7 @@
+ // convert colormap to our 16bit "TIFF"format
+ colorspace_de_palette (image, ColorMap->ColorCount, rmap, gmap, bmap);
+
+- EGifCloseFile(GifFile);
++ Internal_EGifCloseFile(GifFile);
+
+ return true;
+ }
+@@ -165,17 +171,18 @@
+ {
+ GifFileType* GifFile;
+ GifByteType* Ptr;
++ int GifError;
+
+- if ((GifFile = EGifOpen (stream, &GIFOutputFunc)) == NULL)
++ if ((GifFile = EGifOpen (stream, &GIFOutputFunc, &GifError)) == NULL)
+ {
+- std::cerr << "Error preparing GIF file for writing." << std::endl;
++ std::cerr << "Error preparing GIF file for writing: " << GifErrorString(GifError) << std::endl;
+ return false;
+ }
+
+ int ColorMapSize = 256;
+
+ // later use our own colormap generation
+- ColorMapObject* OutputColorMap = MakeMapObject(ColorMapSize, NULL);
++ ColorMapObject* OutputColorMap = GifMakeMapObject(ColorMapSize, NULL);
+ if (!OutputColorMap)
+ return false;
+
+@@ -203,7 +210,7 @@
+ }
+
+
+- if (QuantizeBuffer(image.w, image.h, &ColorMapSize,
++ if (GifQuantizeBuffer(image.w, image.h, &ColorMapSize,
+ RedBuffer, GreenBuffer, BlueBuffer,
+ OutputBuffer, OutputColorMap->Colors) == GIF_ERROR) {
+ return false;
+@@ -215,7 +222,7 @@
+ if (EGifPutScreenDesc(GifFile, image.w, image.h,
+ ColorMapSize, 0, OutputColorMap) == GIF_ERROR ||
+ EGifPutImageDesc(GifFile, 0, 0, image.w, image.h,
+- FALSE, NULL) == GIF_ERROR)
++ false, NULL) == GIF_ERROR)
+ {
+ std::cerr << "Error writing GIF header." << std::endl;
+ return false;
+@@ -234,7 +241,7 @@
+
+ delete (RedBuffer); delete (GreenBuffer); delete (BlueBuffer);
+
+- EGifCloseFile(GifFile);
++ Internal_EGifCloseFile(GifFile);
+ return true;
+ }
+