aboutsummaryrefslogtreecommitdiff
path: root/graphics/meh/meh-giflib.patch
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/meh/meh-giflib.patch')
-rw-r--r--graphics/meh/meh-giflib.patch81
1 files changed, 81 insertions, 0 deletions
diff --git a/graphics/meh/meh-giflib.patch b/graphics/meh/meh-giflib.patch
new file mode 100644
index 000000000000..b58dfd167d90
--- /dev/null
+++ b/graphics/meh/meh-giflib.patch
@@ -0,0 +1,81 @@
+diff -u -r meh-0.3/src/gif.c meh-0.3-git/src/gif.c
+--- meh-0.3/src/gif.c 2010-01-04 17:45:01.000000000 +0000
++++ meh-0.3-git/src/gif.c 2015-08-27 16:11:39.082286073 +0100
+@@ -32,7 +32,11 @@
+ /* HACK HACK HACK */
+ rewind(f);
+ lseek(fileno(f), 0L, SEEK_SET);
++#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
++ if(!(gif = DGifOpenFileHandle(fileno(f), NULL))){
++#else
+ if(!(gif = DGifOpenFileHandle(fileno(f)))){
++#endif
+ /* HACK AND HOPE */
+ rewind(f);
+ lseek(fileno(f), 0L, SEEK_SET);
+@@ -55,11 +59,10 @@
+ struct gif_t *g = (struct gif_t *)img;
+ GifColorType *colormap;
+ SavedImage *s;
++ int ret;
+
+- if(DGifSlurp(g->gif) == GIF_ERROR){
+- PrintGifError();
+- return 1;
+- }
++ if((ret = DGifSlurp(g->gif)) != GIF_OK)
++ goto error;
+
+ s = &g->gif->SavedImages[0];
+
+@@ -67,10 +70,8 @@
+ colormap = s->ImageDesc.ColorMap->Colors;
+ else if(g->gif->SColorMap)
+ colormap = g->gif->SColorMap->Colors;
+- else{
+- PrintGifError();
+- return 1;
+- }
++ else
++ goto error;
+
+ for(i = 0; i < img->bufwidth * img->bufheight; i++){
+ unsigned char idx = s->RasterBits[i];
+@@ -82,11 +83,37 @@
+ img->state |= LOADED | SLOWLOADED;
+
+ return 0;
++error:
++#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
++ fprintf(stderr, "GIFLIB: %s\n", GifErrorString(ret));
++#elif defined(GIFLIB_MAJOR) && defined(GIFLIB_MINOR) && ((GIFLIB_MAJOR == 4 && GIFLIB_MINOR >= 2) || GIFLIB_MAJOR > 4)
++ fprintf(stderr, "GIFLIB: %s\n", GifErrorString());
++#else
++ PrintGifError();
++#endif
++ return 1;
+ }
+
+ void gif_close(struct image *img){
+ struct gif_t *g = (struct gif_t *)img;
++#if defined(GIFLIB_MAJOR) && defined(GIFLIB_MINOR) && (GIFLIB_MAJOR == 5 && GIFLIB_MINOR >= 1)
++ int ret;
++#endif
++
++#if defined(GIFLIB_MAJOR) && defined(GIFLIB_MINOR) && (GIFLIB_MAJOR == 5 && GIFLIB_MINOR >= 1)
++ DGifCloseFile(g->gif,&ret);
++ if(ret != GIF_OK) {
++#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
++ fprintf(stderr, "GIFLIB: %s\n", GifErrorString(ret));
++#elif defined(GIFLIB_MAJOR) && defined(GIFLIB_MINOR) && ((GIFLIB_MAJOR == 4 && GIFLIB_MINOR >= 2) || GIFLIB_MAJOR > 4)
++ fprintf(stderr, "GIFLIB: %s\n", GifErrorString());
++#else
++ PrintGifError();
++#endif
++ }
++#else
+ DGifCloseFile(g->gif);
++#endif
+ fclose(g->f);
+ }
+