From ccc1c0dd3f90f03ff231b48ab81b75288d6919e1 Mon Sep 17 00:00:00 2001 From: hasufell Date: Fri, 14 Nov 2014 17:06:22 +0100 Subject: [PATCH] Fix compilation with giflib-5 --- configure.in | 2 +- src/blocks/gifdbl.c | 12 ++++++++++++ src/libming.h | 13 +++++++++++-- util/gif2dbl.c | 13 +++++++++++++ util/gif2mask.c | 9 +++++++++ 5 files changed, 46 insertions(+), 3 deletions(-) diff --git a/configure.in b/configure.in index 11ab3d7..70c4cf4 100644 --- a/configure.in +++ b/configure.in @@ -289,7 +289,7 @@ dnl MinGW check for libungif AC_CHECK_LIB(ungif, DGifOpen, GIFLIB="-lungif") dnl Solaris needs -lX11 on the linker line for ungif to work AC_CHECK_LIB(gif, GifErrorString, GIFLIB="-lgif",, "-lX11") -AC_CHECK_LIB(gif, PrintGifError, GIFLIB="-lgif",, "-lX11") +AC_CHECK_LIB(gif, DGifOpen, GIFLIB="-lgif", GIFLIB="") if test x"${GIFLIB}" = x; then AC_CHECK_LIB(ungif, PrintGifError, GIFLIB="-lungif",, "-lX11") fi diff --git a/src/blocks/gifdbl.c b/src/blocks/gifdbl.c index d14b273..68a19f9 100644 --- a/src/blocks/gifdbl.c +++ b/src/blocks/gifdbl.c @@ -203,7 +203,11 @@ readGif(GifFileType *file, dblData result) } /* Done! */ +#if GIFLIB_MAJOR < 5 DGifCloseFile(file); +#else + DGifCloseFile(file, NULL); +#endif result->data = malloc(outsize = (int)floor(size*1.01+12)); @@ -227,7 +231,11 @@ SWFDBLBitmapData newSWFDBLBitmapData_fromGifFile(const char *fileName) SWFDBLBitmapData ret; struct dbl_data gifdata; +#if GIFLIB_MAJOR >= 5 + if((file = DGifOpenFileName(fileName, NULL)) == NULL) +#else if((file = DGifOpenFileName(fileName)) == NULL) +#endif return NULL; if(!readGif(file, &gifdata)) return NULL; @@ -246,7 +254,11 @@ SWFDBLBitmapData newSWFDBLBitmapData_fromGifInput(SWFInput input) SWFDBLBitmapData ret; struct dbl_data gifdata; +#if GIFLIB_MAJOR >= 5 + if((file = DGifOpen(input, (InputFunc) gifReadFunc, NULL)) == NULL) +#else if((file = DGifOpen(input, (InputFunc) gifReadFunc)) == NULL) +#endif return NULL; if(!readGif(file, &gifdata)) return NULL; diff --git a/src/libming.h b/src/libming.h index d264458..1461d5a 100644 --- a/src/libming.h +++ b/src/libming.h @@ -76,11 +76,20 @@ typedef unsigned char BOOL; #include #endif -#if GIFLIB_GIFERRORSTRING +#ifdef HAVE_GIF_LIB_H +#include static void PrintGifError(void) { - fprintf(stderr, "\nGIF-LIB error: %s.\n", GifErrorString()); +#if GIFLIB_GIFERRORSTRING +#if GIFLIB_MAJOR < 5 + fprintf(stderr, "\nGIF-LIB error: %s.\n", GifErrorString()); +#else + fprintf(stderr, "\nGIF-LIB error: %s.\n", GifErrorString(0)); +#endif +#else + fprintf(stderr, "\nGIF-LIB error but no GifErrorString support.\n"); +#endif } #endif diff --git a/util/gif2dbl.c b/util/gif2dbl.c index 3c2e7f1..9a35b2c 100644 --- a/util/gif2dbl.c +++ b/util/gif2dbl.c @@ -22,7 +22,9 @@ void error(char *msg) { printf("%s:\n\n", msg); +#if GIFLIB_MAJOR < 5 PrintGifError(); +#endif exit(-1); } @@ -59,8 +61,15 @@ unsigned char *readGif(char *fileName, int *length, int *bytesPerColor) unsigned char *p; int i, nColors, size, alpha, bgColor, alignedWidth; +#if GIFLIB_MAJOR >= 5 + int errorCode = 0; + + if((file = DGifOpenFileName(fileName, &errorCode)) == NULL) + error(GifErrorString(errorCode)); +#else if((file = DGifOpenFileName(fileName)) == NULL) error("Error opening file"); +#endif if(DGifSlurp(file) != GIF_OK) error("Error slurping file"); @@ -190,7 +199,11 @@ unsigned char *readGif(char *fileName, int *length, int *bytesPerColor) } /* Done! */ +#if GIFLIB_MAJOR < 5 DGifCloseFile(file); +#else + DGifCloseFile(file, NULL); +#endif *length = size; return data; diff --git a/util/gif2mask.c b/util/gif2mask.c index 76e36c3..f3e0944 100644 --- a/util/gif2mask.c +++ b/util/gif2mask.c @@ -16,7 +16,9 @@ void error(char *msg) { printf("%s:\n\n", msg); +#if GIFLIB_MAJOR < 5 PrintGifError(); +#endif exit(-1); } @@ -28,8 +30,15 @@ unsigned char *readGif(char *fileName, int *length) unsigned char *data; int i, nColors, size; +#if GIFLIB_MAJOR < 5 if((file = DGifOpenFileName(fileName)) == NULL) error("Error opening file"); +#else + int errorCode = 0; + + if((file = DGifOpenFileName(fileName, &errorCode)) == NULL) + error(GifErrorString(errorCode)); +#endif if(DGifSlurp(file) != GIF_OK) error("Error slurping file"); -- 2.1.3