forked from gentoo/gentoo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmagicpoint-1.13a_p20121015-any-giflib.patch
140 lines (134 loc) · 3.5 KB
/
magicpoint-1.13a_p20121015-any-giflib.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
--- 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;
}