You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/app-office/magicpoint/files/magicpoint-1.13a_p20121015-...

141 lines
3.5 KiB

--- 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;
}