File fontforge-fixgiflib.patch of Package fontforge

---
 gutils/gimagereadgif.c |   32 ++++++++++++++++++++++++++------
 1 file changed, 26 insertions(+), 6 deletions(-)

Index: fontforge-20120731-b/gutils/gimagereadgif.c
===================================================================
--- fontforge-20120731-b.orig/gutils/gimagereadgif.c
+++ fontforge-20120731-b/gutils/gimagereadgif.c
@@ -44,7 +44,11 @@ static int a_file_must_define_something=
 static DL_CONST void *libgif=NULL;
 static GifFileType *(*_DGifOpenFileName)(char *);
 static int (*_DGifSlurp)(GifFileType *);
+#if defined(GIFLIB_MAJOR) && (GIFLIB_MAJOR > 5 || (GIFLIB_MAJOR == 5 && GIFLIB_MINOR >= 1))
+static int (*_DGifCloseFile)(GifFileType *, int *);
+#else
 static int (*_DGifCloseFile)(GifFileType *);
+#endif
 
 static int loadgif() {
     char *err;
@@ -58,7 +62,7 @@ return( 0 );
     }
     _DGifOpenFileName = (GifFileType *(*)(char *)) dlsym(libgif,"DGifOpenFileName");
     _DGifSlurp = (int (*)(GifFileType *)) dlsym(libgif,"DGifSlurp");
-    _DGifCloseFile = (int (*)(GifFileType *)) dlsym(libgif,"DGifCloseFile");
+    _DGifCloseFile = (void *)dlsym(libgif,"DGifCloseFile");
     if ( _DGifOpenFileName && _DGifSlurp && _DGifCloseFile )
 return( 1 );
     dlclose(libgif);
@@ -132,13 +136,17 @@ GImage *GImageReadGif(char *filename) {
 	if ( !loadgif())
 return( NULL );
 
-    if ((gif = _DGifOpenFileName(filename)) == NULL) {
+    if ((gif = _DGifOpenFileName(filename, NULL)) == NULL) {
 	fprintf( stderr, "can't open %s\n", filename);
 return( NULL );
     }
 
     if ( _DGifSlurp(gif)==GIF_ERROR ) {
+#if defined(GIFLIB_MAJOR) && (GIFLIB_MAJOR > 5 || (GIFLIB_MAJOR == 5 && GIFLIB_MINOR >= 1))
+	_DGifCloseFile(gif, NULL);
+#else
 	_DGifCloseFile(gif);
+#endif
 	fprintf( stderr, "Bad gif file %s\n", filename );
 return( NULL );
     }
@@ -150,7 +158,11 @@ return( NULL );
 	ret = images[0];
     else
 	ret = GImageCreateAnimation(images,gif->ImageCount);
-    _DGifCloseFile(gif);
+#if defined(GIFLIB_MAJOR) && (GIFLIB_MAJOR > 5 || (GIFLIB_MAJOR == 5 && GIFLIB_MINOR >= 1))
+	_DGifCloseFile(gif, NULL);
+#else
+	_DGifCloseFile(gif);
+#endif
     free(images);
 return( ret );
 }
@@ -220,13 +232,17 @@ GImage *GImageReadGif(char *filename) {
     GifFileType *gif;
     int i;
 
-    if ((gif = DGifOpenFileName(filename)) == NULL) {
+    if ((gif = DGifOpenFileName(filename, NULL)) == NULL) {
 	fprintf( stderr, "can't open %s\n", filename);
 return( NULL );
     }
 
     if ( DGifSlurp(gif)==GIF_ERROR ) {
-	DGifCloseFile(gif);
+#if defined(GIFLIB_MAJOR) && (GIFLIB_MAJOR > 5 || (GIFLIB_MAJOR == 5 && GIFLIB_MINOR >= 1))
+	DGifCloseFile(gif, NULL);
+#else
+	DGifCloseFile(gif);
+#endif
 	fprintf(stderr,"Bad gif file %s\n", filename );
 return( NULL );
     }
@@ -238,7 +254,11 @@ return( NULL );
 	ret = images[0];
     else
 	ret = GImageCreateAnimation(images,gif->ImageCount);
-    DGifCloseFile(gif);
+#if defined(GIFLIB_MAJOR) && (GIFLIB_MAJOR > 5 || (GIFLIB_MAJOR == 5 && GIFLIB_MINOR >= 1))
+    DGifCloseFile(gif, NULL);
+#else
+    DGifCloseFile(gif);
+#endif
     free(images);
 return( ret );
 }
openSUSE Build Service is sponsored by