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
|
# This patch has been taken from the openSUSE bug tracker found at
# http://lists.opensuse.org/archive/opensuse-commit/2006-Jun/0984.html,
# fixing the use of outdated functions of libpng, see bug #141566
--- /tmp/html2png.c 2006-07-25 09:53:14.000000000 +0200
+++ html2png.c 2006-07-25 09:56:30.000000000 +0200
@@ -186,13 +186,12 @@
}
#ifdef CONFIG_PNG_OUTPUT
-extern void png_write_init();
int png_save(QEditScreen *s, const char *filename)
{
CFBContext *cfb = s->private;
- png_struct * volatile png_ptr = NULL;
- png_info * volatile info_ptr = NULL;
+ png_structp png_ptr = NULL;
+ png_infop info_ptr = NULL;
png_byte *row_ptr, *row_pointers[1], *row = NULL;
int w, h, x, y;
unsigned int r, g, b, v;
@@ -202,32 +201,30 @@
row = malloc(3 * s->width);
if (!row)
goto fail;
- png_ptr = malloc(sizeof (png_struct));
+ png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (!png_ptr)
goto fail;
- info_ptr = malloc(sizeof (png_info));
- if (!info_ptr)
- goto fail;
+ info_ptr = png_create_info_struct (png_ptr);
+ if (!info_ptr) {
+ png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
+ goto fail;
+ }
f = fopen(filename, "w");
if (!f)
goto fail;
if (setjmp(png_ptr->jmpbuf)) {
- png_write_destroy(png_ptr);
+ png_destroy_write_struct(&png_ptr, &info_ptr);
fail:
/* free pointers before returning. Make sure you clean up
anything else you've done. */
- free(png_ptr);
- free(info_ptr);
free(row);
if (f)
fclose(f);
return -1;
}
- png_info_init(info_ptr);
- png_write_init(png_ptr);
png_init_io(png_ptr, f);
data = (unsigned int *)cfb->base;
@@ -259,10 +256,8 @@
data = (void *)((char *)data + cfb->wrap);
}
png_write_end(png_ptr, info_ptr);
- png_write_destroy(png_ptr);
+ png_destroy_write_struct (&png_ptr, &info_ptr);
- free(png_ptr);
- free(info_ptr);
free(row);
fclose(f);
return 0;
|