]> git.imager.perl.org - imager.git/blobdiff - raw.c
finally found which file contained the POD errors that
[imager.git] / raw.c
diff --git a/raw.c b/raw.c
index 8b363d5a96b2d3c20a780fcccd97674c5c3c5c60..efdf44ae6117f2692475559cbac16dbeb671e359 100644 (file)
--- a/raw.c
+++ b/raw.c
@@ -53,13 +53,15 @@ i_img *
 i_readraw_wiol(io_glue *ig, int x, int y, int datachannels, int storechannels, int intrl) {
   i_img* im;
   int rc,k;
-  
+
   unsigned char *inbuffer;
   unsigned char *ilbuffer;
   unsigned char *exbuffer;
   
   int inbuflen,ilbuflen,exbuflen;
 
+  i_clear_error();
+  
   io_glue_commit_types(ig);
   mm_log((1, "i_readraw(ig %p,x %d,y %d,datachannels %d,storechannels %d,intrl %d)\n",
          ig, x, y, datachannels, storechannels, intrl));
@@ -83,7 +85,17 @@ i_readraw_wiol(io_glue *ig, int x, int y, int datachannels, int storechannels, i
   k=0;
   while( k<im->ysize ) {
     rc = ig->readcb(ig, inbuffer, inbuflen);
-    if (rc != inbuflen) { fprintf(stderr,"Premature end of file.\n"); exit(2); }
+    if (rc != inbuflen) { 
+      if (rc < 0)
+       i_push_error(0, "error reading file");
+      else
+       i_push_error(0, "premature end of file");
+      i_img_destroy(im);
+      myfree(inbuffer);
+      if (intrl != 0) myfree(ilbuffer);
+      if (datachannels != storechannels) myfree(exbuffer);
+      return NULL;
+    }
     interleave(inbuffer,ilbuffer,im->xsize,datachannels);
     expandchannels(ilbuffer,exbuffer,im->xsize,datachannels,storechannels);
     /* FIXME: Do we ever want to save to a virtual image? */