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); }