--- 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 <gif_lib.h>
 
+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;
 	}
