simplify png cleanup
authorMarkus Teich <markus.teich@stusta.mhn.de>
Wed, 11 Nov 2015 17:49:57 +0000 (18:49 +0100)
committerMarkus Teich <markus.teich@stusta.mhn.de>
Wed, 11 Nov 2015 17:50:46 +0000 (18:50 +0100)
sent.c

diff --git a/sent.c b/sent.c
index 50dee4cf056cff9357e76ecc6a0bf3fb8b872f4a..a263aaf72aa63a85b0b0d0145f373774d6fa328b 100644 (file)
--- 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;
        }