summaryrefslogtreecommitdiff
path: root/graphics/vigra/patches/patch-ab
blob: 7ee45b576d62746c377d099e1e0b469ae20207af (plain)
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
$NetBSD: patch-ab,v 1.3 2011/01/15 16:31:18 wiz Exp $

Fix compilation with png-1.4, already included upstream.
Fix build with png-1.5.

--- src/impex/png.cxx.orig	2010-04-20 16:29:02.000000000 +0000
+++ src/impex/png.cxx
@@ -75,7 +75,11 @@ extern "C" {
 static void PngError( png_structp png_ptr, png_const_charp error_msg )
 {
     png_error_message = std::string(error_msg);
+#if (PNG_LIBPNG_VER < 10500)
     longjmp( png_ptr->jmpbuf, 1 );
+#else
+    png_longjmp( png_ptr, 1 );
+#endif
 }
 
 // called on non-fatal errors
@@ -207,7 +211,7 @@ namespace vigra {
         vigra_postcondition( png != 0, "could not create the read struct." );
 
         // create info struct
-        if (setjmp(png->jmpbuf)) {
+        if (setjmp(png_jmpbuf(png))) {
             png_destroy_read_struct( &png, &info, NULL );
             vigra_postcondition( false, png_error_message.insert(0, "error in png_create_info_struct(): ").c_str() );
         }
@@ -215,14 +219,14 @@ namespace vigra {
         vigra_postcondition( info != 0, "could not create the info struct." );
 
         // init png i/o
-        if (setjmp(png->jmpbuf)) {
+        if (setjmp(png_jmpbuf(png))) {
             png_destroy_read_struct( &png, &info, NULL );
             vigra_postcondition( false, png_error_message.insert(0, "error in png_init_io(): ").c_str() );
         }
         png_init_io( png, file.get() );
 
         // specify that the signature was already read
-        if (setjmp(png->jmpbuf)) {
+        if (setjmp(png_jmpbuf(png))) {
             png_destroy_read_struct( &png, &info, NULL );
             vigra_postcondition( false, png_error_message.insert(0, "error in png_set_sig_bytes(): ").c_str() );
         }
@@ -238,13 +242,13 @@ namespace vigra {
     void PngDecoderImpl::init()
     {
         // read all chunks up to the image data
-        if (setjmp(png->jmpbuf))
+        if (setjmp(png_jmpbuf(png)))
             vigra_postcondition( false, png_error_message.insert(0, "error in png_read_info(): ").c_str() );
         png_read_info( png, info );
 
         // pull over the header fields
         int interlace_method, compression_method, filter_method;
-        if (setjmp(png->jmpbuf))
+        if (setjmp(png_jmpbuf(png)))
             vigra_postcondition( false, png_error_message.insert(0, "error in png_get_IHDR(): ").c_str() );
         png_get_IHDR( png, info, &width, &height, &bit_depth, &color_type,
                       &interlace_method, &compression_method, &filter_method );
@@ -258,7 +262,7 @@ namespace vigra {
 
         // transform palette to rgb
         if ( color_type == PNG_COLOR_TYPE_PALETTE) {
-            if (setjmp(png->jmpbuf))
+            if (setjmp(png_jmpbuf(png)))
                 vigra_postcondition( false, png_error_message.insert(0, "error in png_palette_to_rgb(): ").c_str() );
             png_set_palette_to_rgb(png);
             color_type = PNG_COLOR_TYPE_RGB;
@@ -267,9 +271,9 @@ namespace vigra {
 
         // expand gray values to at least one byte size
         if ( color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8 ) {
-            if (setjmp(png->jmpbuf))
-                vigra_postcondition( false,png_error_message.insert(0, "error in png_set_gray_1_2_4_to_8(): ").c_str());
-            png_set_gray_1_2_4_to_8(png);
+            if (setjmp(png_jmpbuf(png)))
+                vigra_postcondition( false,png_error_message.insert(0, "error in png_set_expand_gray_1_2_4_to_8(): ").c_str());
+            png_set_expand_gray_1_2_4_to_8(png);
             bit_depth = 8;
         }
 
@@ -277,7 +281,7 @@ namespace vigra {
 #if 0
         // strip alpha channel
         if ( color_type & PNG_COLOR_MASK_ALPHA ) {
-            if (setjmp(png->jmpbuf))
+            if (setjmp(png_jmpbuf(png)))
                 vigra_postcondition( false, png_error_message.insert(0, "error in png_set_strip_alpha(): ").c_str() );
             png_set_strip_alpha(png);
             color_type ^= PNG_COLOR_MASK_ALPHA;
@@ -319,9 +323,9 @@ namespace vigra {
 #if (PNG_LIBPNG_VER > 10008) && defined(PNG_READ_iCCP_SUPPORTED)
         char * dummyName;
         int dummyCompType;
-        char * profilePtr;
+        png_byte * profilePtr;
         png_uint_32 profileLen;
-        if (info->valid & PNG_INFO_iCCP) {
+        if (png_get_valid(png, info, PNG_INFO_iCCP)) {
             png_get_iCCP(png, info, &dummyName, &dummyCompType, &profilePtr, &profileLen) ;
             iccProfilePtr = (unsigned char *) profilePtr;
             iccProfileLength = profileLen;
@@ -334,7 +338,7 @@ namespace vigra {
         // image gamma
         double image_gamma = 0.45455;
         if ( png_get_valid( png, info, PNG_INFO_gAMA ) ) {
-            if (setjmp(png->jmpbuf))
+            if (setjmp(png_jmpbuf(png)))
                 vigra_postcondition( false, png_error_message.insert(0, "error in png_get_gAMA(): ").c_str() );
             png_get_gAMA( png, info, &image_gamma );
         }
@@ -343,26 +347,26 @@ namespace vigra {
         double screen_gamma = 2.2;
 
         // set gamma correction
-        if (setjmp(png->jmpbuf))
+        if (setjmp(png_jmpbuf(png)))
             vigra_postcondition( false, png_error_message.insert(0, "error in png_set_gamma(): ").c_str() );
         png_set_gamma( png, screen_gamma, image_gamma );
 #endif
 
         // interlace handling, get number of read passes needed
-        if (setjmp(png->jmpbuf))
+        if (setjmp(png_jmpbuf(png)))
             vigra_postcondition( false,png_error_message.insert(0, "error in png_set_interlace_handling(): ").c_str());
         n_interlace_passes = png_set_interlace_handling(png);
 
         // update png library state to reflect any changes that were made
-        if (setjmp(png->jmpbuf))
+        if (setjmp(png_jmpbuf(png)))
             vigra_postcondition( false, png_error_message.insert(0, "error in png_read_update_info(): ").c_str() );
         png_read_update_info( png, info );
 
-        if (setjmp(png->jmpbuf))
+        if (setjmp(png_jmpbuf(png)))
             vigra_postcondition( false,png_error_message.insert(0, "error in png_get_channels(): ").c_str());
         n_channels = png_get_channels(png, info);
 
-        if (setjmp(png->jmpbuf))
+        if (setjmp(png_jmpbuf(png)))
             vigra_postcondition( false,png_error_message.insert(0, "error in png_get_rowbytes(): ").c_str());
         rowsize = png_get_rowbytes(png, info);
 
@@ -373,7 +377,7 @@ namespace vigra {
     void PngDecoderImpl::nextScanline()
     {
         for (int i=0; i < n_interlace_passes; i++) {
-        if (setjmp(png->jmpbuf))
+        if (setjmp(png_jmpbuf(png)))
                 vigra_postcondition( false,png_error_message.insert(0, "error in png_read_row(): ").c_str());
             png_read_row(png, row_data.begin(), NULL);
         }
@@ -539,7 +543,7 @@ namespace vigra {
         vigra_postcondition( png != 0, "could not create the write struct." );
 
         // create info struct
-        if (setjmp(png->jmpbuf)) {
+        if (setjmp(png_jmpbuf(png))) {
             png_destroy_write_struct( &png, &info );
             vigra_postcondition( false, png_error_message.insert(0, "error in png_info_struct(): ").c_str() );
         }
@@ -550,7 +554,7 @@ namespace vigra {
         }
 
         // init png i/o
-        if (setjmp(png->jmpbuf)) {
+        if (setjmp(png_jmpbuf(png))) {
             png_destroy_write_struct( &png, &info );
             vigra_postcondition( false, png_error_message.insert(0, "error in png_init_io(): ").c_str() );
         }
@@ -565,7 +569,7 @@ namespace vigra {
     void PngEncoderImpl::finalize()
     {
         // write the IHDR
-        if (setjmp(png->jmpbuf))
+        if (setjmp(png_jmpbuf(png)))
             vigra_postcondition( false, png_error_message.insert(0, "error in png_set_IHDR(): ").c_str() );
         png_set_IHDR( png, info, width, height, bit_depth, color_type,
                       PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT,
@@ -573,7 +577,7 @@ namespace vigra {
 
         // set resolution
         if (x_resolution > 0 && y_resolution > 0) {
-            if (setjmp(png->jmpbuf))
+            if (setjmp(png_jmpbuf(png)))
                 vigra_postcondition( false, png_error_message.insert(0, "error in png_set_pHYs(): ").c_str() );
             png_set_pHYs(png, info, (png_uint_32) (x_resolution / 0.0254 + 0.5),
                          (png_uint_32) (y_resolution / 0.0254 + 0.5),
@@ -582,7 +586,7 @@ namespace vigra {
 
         // set offset
         if (position.x > 0 && position.y > 0) {
-            if (setjmp(png->jmpbuf))
+            if (setjmp(png_jmpbuf(png)))
                 vigra_postcondition( false, png_error_message.insert(0, "error in png_set_oFFs(): ").c_str() );
             png_set_oFFs(png, info, position.x, position.y, PNG_OFFSET_PIXEL);
         }
@@ -591,12 +595,12 @@ namespace vigra {
         // set icc profile
         if (iccProfile.size() > 0) {
             png_set_iCCP(png, info, const_cast<char*>("icc"), 0,
-                         (char *)iccProfile.begin(), (png_uint_32)iccProfile.size());
+                         (png_bytep)iccProfile.begin(), (png_uint_32)iccProfile.size());
         }
 #endif
 
         // write the info struct
-        if (setjmp(png->jmpbuf))
+        if (setjmp(png_jmpbuf(png)))
             vigra_postcondition( false, png_error_message.insert(0, "error in png_write_info(): ").c_str() );
         png_write_info( png, info );
 
@@ -628,10 +632,10 @@ namespace vigra {
         }
 
         // write the whole image
-        if (setjmp(png->jmpbuf))
+        if (setjmp(png_jmpbuf(png)))
             vigra_postcondition( false, png_error_message.insert(0, "error in png_write_image(): ").c_str() );
         png_write_image( png, row_pointers.begin() );
-        if (setjmp(png->jmpbuf))
+        if (setjmp(png_jmpbuf(png)))
             vigra_postcondition( false, png_error_message.insert(0, "error in png_write_end(): ").c_str() );
         png_write_end(png, info);
     }