summaryrefslogtreecommitdiff
path: root/www/Mosaic/patches/patch-ai
blob: d28c7f0d08b5e19cbb5cdf2039ae63f8aadb8dbe (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
$NetBSD: patch-ai,v 1.3 2001/08/05 23:43:12 fredb Exp $

--- src/readPNG.c.orig	Sun Jun 30 07:30:00 1996
+++ src/readPNG.c
@@ -91,8 +91,8 @@
     unsigned char *p;
     png_byte *q;
 
-    png_struct *png_ptr;
-    png_info *info_ptr;
+    png_struct *png_ptr = NULL;
+    png_info *info_ptr = NULL;
 
     double screen_gamma;
 
@@ -125,19 +125,20 @@
            decoding it */
     rewind(infile);
 
-        /* allocate the structures */
-    png_ptr = (png_struct *)malloc(sizeof(png_struct));
+        /* allocate and initialize the structures */
+    png_ptr = (png_struct *)png_create_read_struct(PNG_LIBPNG_VER_STRING,
+                   NULL, NULL, NULL);
     if(!png_ptr)
         return 0;
 
-    info_ptr = (png_info *)malloc(sizeof(png_info));
+    info_ptr = (png_info *)png_create_info_struct(png_ptr);
     if(!info_ptr) {
-        free(png_ptr);
+        png_destroy_read_struct(&png_ptr, NULL, NULL);
         return 0;
     }
 
         /* Establish the setjmp return context for png_error to use. */
-    if (setjmp(png_ptr->jmpbuf)) {
+    if (setjmp(png_jmpbuf(png_ptr))) {
         
 #ifndef DISABLE_TRACE
         if (srcTrace) {
@@ -145,26 +146,19 @@
         }
 #endif
 
-        png_read_destroy(png_ptr, info_ptr, (png_info *)0); 
-
         if(png_pixels != NULL)
             free((char *)png_pixels);
         if(row_pointers != NULL)
             free((png_byte **)row_pointers);
-                
-        free((char *)png_ptr);
-        free((char *)info_ptr);
         
+        png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
+
         return 0;
     }
 
     /* SWP -- Hopefully to fix cores on bad PNG files */
-    png_set_message_fn(png_ptr,png_get_msg_ptr(png_ptr),NULL,NULL); 
+    png_set_error_fn(png_ptr,png_get_error_ptr(png_ptr),NULL,NULL);
 
-        /* initialize the structures */
-    png_info_init(info_ptr);
-    png_read_init(png_ptr);
-    
         /* set up the input control */
     png_init_io(png_ptr, infile);
     
@@ -316,13 +310,14 @@
            png_read_image(). */
     png_pixels = (png_byte *)malloc(info_ptr->rowbytes * 
                                     (*height) * sizeof(png_byte));
-    
 
     row_pointers = (png_byte **) malloc((*height) * sizeof(png_byte *));
     for (i=0; i < *height; i++)
         row_pointers[i]=png_pixels+(info_ptr->rowbytes*i);
 
-    
+    png_set_rows(png_ptr, info_ptr, row_pointers);
+
+
         /* FINALLY - read the darn thing. */
     png_read_image(png_ptr, row_pointers);
     
@@ -409,13 +404,8 @@
     free((png_byte **)row_pointers);
     
         /* clean up after the read, and free any memory allocated */
-    png_read_destroy(png_ptr, info_ptr, (png_info *)0);
-    
+    png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
 
-        /* free the structures */
-    free((char *)png_ptr);
-    free((char *)info_ptr);
-    
     return pixmap;
 }