summaryrefslogtreecommitdiff
path: root/sent.c
diff options
context:
space:
mode:
authorMarkus Teich <markus.teich@stusta.mhn.de>2015-11-11 18:49:57 +0100
committerMarkus Teich <markus.teich@stusta.mhn.de>2015-11-11 18:50:46 +0100
commitf6455efd52cdcfcb25030a8f3644162e8b861573 (patch)
tree3f31596150249a3dd257868ffb2b0e520b00c61c /sent.c
parent67ec8b1547b9e58155f0966731820b25e71240e8 (diff)
simplify png cleanup
Diffstat (limited to 'sent.c')
-rw-r--r--sent.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/sent.c b/sent.c
index 50dee4c..a263aaf 100644
--- a/sent.c
+++ b/sent.c
@@ -79,6 +79,7 @@ typedef struct {
} Shortcut;
static Image *pngopen(char *filename);
+static void pngfree(Image *img);
static int pngread(Image *img);
static int pngprepare(Image *img);
static void pngscale(Image *img);
@@ -146,14 +147,9 @@ Image *pngopen(char *filename)
free(img);
return NULL;
}
- if (!(img->info_ptr = png_create_info_struct(img->png_ptr))) {
- png_destroy_read_struct(&img->png_ptr, NULL, NULL);
- free(img);
- return NULL;
- }
- if (setjmp(png_jmpbuf(img->png_ptr))) {
- png_destroy_read_struct(&img->png_ptr, &img->info_ptr, NULL);
- free(img);
+ if (!(img->info_ptr = png_create_info_struct(img->png_ptr))
+ || setjmp(png_jmpbuf(img->png_ptr))) {
+ pngfree(img);
return NULL;
}
@@ -167,6 +163,12 @@ Image *pngopen(char *filename)
return img;
}
+void pngfree(Image *img)
+{
+ png_destroy_read_struct(&img->png_ptr, img->info_ptr ? &img->info_ptr : NULL, NULL);
+ free(img);
+}
+
int pngread(Image *img)
{
unsigned int y;
@@ -330,6 +332,8 @@ void getfontsize(char *str, unsigned int *width, unsigned int *height)
void cleanup()
{
+ unsigned int i;
+
drw_scm_free(sc);
drw_free(d);
@@ -337,6 +341,10 @@ void cleanup()
XSync(xw.dpy, False);
XCloseDisplay(xw.dpy);
if (slides) {
+ for (i = 0; i < slidecount; i++) {
+ if (slides[i].img)
+ pngfree(slides[i].img);
+ }
free(slides);
slides = NULL;
}