File xplanet-giflib5.patch of Package xplanet

---
 src/libimage/gif.c |   85 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 85 insertions(+)

Index: xplanet-1.3.0/src/libimage/gif.c
===================================================================
--- xplanet-1.3.0.orig/src/libimage/gif.c
+++ xplanet-1.3.0/src/libimage/gif.c
@@ -23,6 +23,35 @@
 
 #include <gif_lib.h>
 
+#if defined(GIFLIB_MAJOR)
+#	if GIFLIB_MAOJR > 5 || (GIFLIB_MAJOR == 5 && GIFLIB_MINOR >= 1)
+#		define DGifCloseFile(x) DGifCloseFile(x, NULL)
+#		define EGifCloseFile(x) EGifCloseFile(x, NULL)
+#	endif
+#	if GIFLIB_MAJOR >= 5
+/* old giflib did define TRUE/FALSE */
+#		ifndef TRUE
+#			define TRUE        1
+#		endif /* TRUE */
+#		ifndef FALSE
+#			define FALSE       0
+#		endif /* FALSE */
+
+static void
+gif_error(int err)
+{
+    const char * Err = GifErrorString(err);
+    if (Err != NULL)
+        fprintf(stderr, "\nGIF-LIB error: %s.\n", Err);
+    else
+        fprintf(stderr, "\nGIF-LIB undefined error %d.\n", err);
+}
+
+#		define QuantizeBuffer GifQuantizeBuffer
+#		define MakeMapObject  GifMakeMapObject
+#	endif
+#endif
+
 /*
   A lot of this is based on the gif2rgb and rgb2gif codes in the libungif 
   distribution. 
@@ -42,11 +71,20 @@ read_gif(const char *filename, int *widt
     int color_index;
     unsigned char *ptr = NULL;
 
+#if GIFLIB_MAJOR >= 5
+    int err;
+    infile = DGifOpenFileName(filename, &err);
+#else
     infile = DGifOpenFileName(filename);
+#endif
 
     if (infile == NULL)
     {
+#if GIFLIB_MAJOR < 5
         PrintGifError();
+#else
+        gif_error(err);
+#endif
         return(0);
     }
 
@@ -54,7 +92,11 @@ read_gif(const char *filename, int *widt
     {
         if (DGifGetRecordType(infile, &record_type) == GIF_ERROR) 
         {
+#if GIFLIB_MAJOR < 5
             PrintGifError();
+#else
+            gif_error(infile->Error);
+#endif
             return(0);
         }
 
@@ -63,7 +105,11 @@ read_gif(const char *filename, int *widt
         case IMAGE_DESC_RECORD_TYPE:
             if (DGifGetImageDesc(infile) == GIF_ERROR)
             {
+#if GIFLIB_MAJOR < 5
                 PrintGifError();
+#else
+                gif_error(infile->Error);
+#endif
                 return(0);
             }
 
@@ -107,14 +153,22 @@ read_gif(const char *filename, int *widt
             GifByteType *ext;
             if (DGifGetExtension(infile, &ext_code, &ext) == GIF_ERROR) 
             {
+#if GIFLIB_MAJOR < 5
                 PrintGifError();
+#else
+                gif_error(infile->Error);
+#endif
                 return(0);
             }
             while (ext != NULL) 
             {
                 if (DGifGetExtensionNext(infile, &ext) == GIF_ERROR) 
                 {
+#if GIFLIB_MAJOR < 5
                     PrintGifError();
+#else
+                    gif_error(infile->Error);
+#endif
                     return(0);
                 }
             }
@@ -166,6 +220,9 @@ write_gif(const char *filename, int widt
     GifByteType *red, *green, *blue, *buffer, *ptr;
     GifFileType *outfile;
     ColorMapObject *colormap;
+#if GIFLIB_MAJOR >= 5
+    int err;
+#endif
 
     red = malloc(width * height * sizeof(GifByteType));
     green = malloc(width * height * sizeof(GifByteType));
@@ -190,7 +247,11 @@ write_gif(const char *filename, int widt
     if (QuantizeBuffer(width, height, &colormap_size, red, green, blue,   
                        buffer, colormap->Colors) == GIF_ERROR)
     {
+#if GIFLIB_MAJOR < 5
         PrintGifError();
+#else
+        /* gif utilities don't print anything about the error reason also */
+#endif
         return(0);
     }
 
@@ -198,24 +259,40 @@ write_gif(const char *filename, int widt
     free(green);
     free(blue);
 
+#if GIFLIB_MAJOR < 5
     outfile = EGifOpenFileName((char *) filename, FALSE);
+#else
+    outfile = EGifOpenFileName((char *) filename, FALSE, &err);
+#endif
     if (outfile == NULL)
     {
+#if GIFLIB_MAJOR < 5
         PrintGifError();
+#else
+        gif_error(err);
+#endif
         return(0);
     }
 
     if (EGifPutScreenDesc(outfile, width, height, colormap_size, 0, colormap)
         == GIF_ERROR)
     {
+#if GIFLIB_MAJOR < 5
         PrintGifError();
+#else
+        gif_error(outfile->Error);
+#endif
         return(0);
     }
 
     if (EGifPutImageDesc(outfile, 0, 0, width, height, FALSE, NULL)
         == GIF_ERROR)
     {
+#if GIFLIB_MAJOR < 5
         PrintGifError();
+#else
+        gif_error(outfile->Error);
+#endif
         return(0);
     }
 
@@ -224,7 +301,11 @@ write_gif(const char *filename, int widt
     {
         if (EGifPutLine(outfile, ptr, width) == GIF_ERROR)
         {
+#if GIFLIB_MAJOR < 5
             PrintGifError();
+#else
+            gif_error(outfile->Error);
+#endif
             return(0);
         }
         ptr += width;
@@ -233,7 +314,11 @@ write_gif(const char *filename, int widt
     EGifSpew(outfile);
 
     if (EGifCloseFile(outfile) == GIF_ERROR) 
+#if GIFLIB_MAJOR < 5
         PrintGifError();
+#else
+        gif_error(outfile->Error);
+#endif
 
     free(buffer);
 
openSUSE Build Service is sponsored by