-#include "image.h"
+#include "imager.h"
#include <stdio.h>
#include "iolayer.h"
#ifndef _MSC_VER
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));
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? */
return(0);
}
} else {
- int y;
-
if (im->type == i_direct_type) {
/* just save it as 8-bits, maybe support saving higher bit count
raw images later */