]> git.imager.perl.org - imager.git/blobdiff - png.c
- in some cases it's possible for giflib/libungif to return color
[imager.git] / png.c
diff --git a/png.c b/png.c
index 684d53f971e854b97724dd70b552cd27ff0bda47..5ea25ce08c047fd10c9e252cd0c5f316ec6eba2e 100644 (file)
--- a/png.c
+++ b/png.c
@@ -1,5 +1,5 @@
 #include "iolayer.h"
-#include "imagei.h"
+#include "imageri.h"
 #include "png.h"
 
 /* Check to see if a file is a PNG file using png_sig_cmp().  png_sig_cmp()
@@ -67,7 +67,7 @@ check_if_png(char *file_name, FILE **fp) {
 undef_int
 i_writepng_wiol(i_img *im, io_glue *ig) {
   png_structp png_ptr;
-  png_infop info_ptr;
+  png_infop info_ptr = NULL;
   int width,height,y;
   volatile int cspace,channels;
   double xres, yres;
@@ -105,7 +105,7 @@ i_writepng_wiol(i_img *im, io_glue *ig) {
   info_ptr = png_create_info_struct(png_ptr);
 
   if (info_ptr == NULL) {
-    png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
+    png_destroy_write_struct(&png_ptr, &info_ptr);
     return 0;
   }
   
@@ -113,7 +113,7 @@ i_writepng_wiol(i_img *im, io_glue *ig) {
    * error hadnling functions in the png_create_write_struct() call.
    */
   if (setjmp(png_ptr->jmpbuf)) {
-    png_destroy_write_struct(&png_ptr,  (png_infopp)NULL);
+    png_destroy_write_struct(&png_ptr, &info_ptr);
     return(0);
   }
   
@@ -162,22 +162,16 @@ i_writepng_wiol(i_img *im, io_glue *ig) {
   }
   else {
     unsigned char *data = mymalloc(im->xsize * im->channels);
-    if (data) {
-      for (y = 0; y < height; y++) {
-        i_gsamp(im, 0, im->xsize, y, data, NULL, im->channels);
-        png_write_row(png_ptr, (png_bytep)data);
-      }
-      myfree(data);
-    }
-    else {
-      png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
-      return 0;
+    for (y = 0; y < height; y++) {
+      i_gsamp(im, 0, im->xsize, y, data, NULL, im->channels);
+      png_write_row(png_ptr, (png_bytep)data);
     }
+    myfree(data);
   }
 
   png_write_end(png_ptr, info_ptr);
 
-  png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
+  png_destroy_write_struct(&png_ptr, &info_ptr);
 
   ig->closecb(ig);