--- kit.orig/image/gif.c 2000-03-07 07:59:56.000000000 +0100 +++ kit/image/gif.c 2016-01-12 17:35:49.792443794 +0100 @@ -18,6 +18,18 @@ #include "image.h" #include +static void stderrGifError(GifFileType *gifp, int e) { +#if defined(GIFLIB_MAJOR) /* added in 4.2.0 along with GifError{,String}() */ +# if GIFLIB_MAJOR >= 5 + fprintf(stderr, "\nGIF-LIB error: %s.\n", GifErrorString(gifp ? gifp->Error : e)); +# else + fprintf(stderr, "\nGIF-LIB error: %s.\n", GifErrorString()); +# endif +#else + PrintGifError(); +#endif +} + static void tellAboutImage(name, gifp) char *name; @@ -49,10 +61,17 @@ GifFileType *GifFile; ColorMapObject *ColorMap; GifColorType *ColorMapEntry; + int gerr = 0; +#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5 + GifFile = DGifOpenFileName(fullname, &gerr); +#else GifFile = DGifOpenFileName(fullname); - if (GifFile == NULL) +#endif + if (GifFile == NULL) { + stderrGifError(GifFile, gerr); return NULL; + } if ((ScreenBuffer = (GifRowType *) malloc(GifFile->SHeight * sizeof(GifRowType *))) == NULL) { @@ -87,13 +106,13 @@ /* Scan the content of the GIF file and load the image(s) in: */ do { if (DGifGetRecordType(GifFile, &RecordType) == GIF_ERROR) { - PrintGifError(); + stderrGifError(GifFile, 0); exit(-1); } switch (RecordType) { case IMAGE_DESC_RECORD_TYPE: if (DGifGetImageDesc(GifFile) == GIF_ERROR) { - PrintGifError(); + stderrGifError(GifFile, 0); exit(-1); } Row = GifFile->Image.Top; /* Image Position relative to Screen. */ @@ -113,7 +132,7 @@ j += InterlacedJumps[i]) { if (DGifGetLine(GifFile, &ScreenBuffer[j][Col], Width) == GIF_ERROR) { - PrintGifError(); + stderrGifError(GifFile, 0); exit(-1); } } @@ -122,7 +141,7 @@ for (i = 0; i < Height; i++) { if (DGifGetLine(GifFile, &ScreenBuffer[Row++][Col], Width) == GIF_ERROR) { - PrintGifError(); + stderrGifError(GifFile, 0); exit(-1); } } @@ -131,7 +150,7 @@ case EXTENSION_RECORD_TYPE: /* Skip any extension blocks in file: */ if (DGifGetExtension(GifFile, &ExtCode, &Extension) == GIF_ERROR) { - PrintGifError(); + stderrGifError(GifFile, 0); exit(-1); } /* very adhoc transparency support */ @@ -141,7 +160,7 @@ } while (Extension != NULL) { if (DGifGetExtensionNext(GifFile, &Extension) == GIF_ERROR) { - PrintGifError(); + stderrGifError(GifFile, 0); exit(-1); } } @@ -179,8 +198,21 @@ pixline[x] = GifRow[x]; } +#if defined(GIFLIB_MAJOR) && (GIFLIB_MAJOR > 5 || (GIFLIB_MAJOR == 5 && GIFLIB_MINOR >= 1)) + if (DGifCloseFile(GifFile, &gerr) == GIF_ERROR) { + stderrGifError(NULL, gerr); +#else if (DGifCloseFile(GifFile) == GIF_ERROR) { - PrintGifError(); +# if defined(GIFLIB_MAJOR) +# if GIFLIB_MAJOR >= 5 + stderrGifError(GifFile, 0); +# else + stderrGifError(NULL, GifError()); +# endif +# else + stderrGifError(NULL, 0); +# endif +#endif exit(-1); } @@ -195,12 +227,22 @@ { GifFileType *gifp; int ret; + int gerr = 0; +#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5 + gifp = DGifOpenFileName(fullname, &gerr); +#else gifp = DGifOpenFileName(fullname); - if (gifp == NULL) +#endif + if (gifp == NULL) { + stderrGifError(gifp, gerr); ret = 0; - else { + } else { +#if defined(GIFLIB_MAJOR) && (GIFLIB_MAJOR > 5 || (GIFLIB_MAJOR == 5 && GIFLIB_MINOR >= 1)) + DGifCloseFile(gifp, &gerr); +#else DGifCloseFile(gifp); +#endif tellAboutImage(name); ret = 1; }