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