Improved error handling.
diff --git a/Modules/imgfile.c b/Modules/imgfile.c
index 4c452d6..8bf6d06 100644
--- a/Modules/imgfile.c
+++ b/Modules/imgfile.c
@@ -43,6 +43,15 @@
 static char gfname[1024];
 static IMAGE *image;
 
+static int error_called;
+
+static imgfile_error(str)
+    char *str;
+{
+    err_setstr(ImgfileError, str);
+    error_called = 1;
+    return;	/* To imglib, which will return a failure indictaor */
+}
 
 static
 imgfile_open(args)
@@ -52,13 +61,17 @@
     
     if ( !getargs(args, "s", &fname) )
       return 0;
+    i_seterror(imgfile_error);
+    error_called = 0;
     if ( image != NULL && strcmp(fname, gfname) != 0 ) {
 	iclose(image);
 	image = NULL;
 	gfname[0] = '\0';
     }
     if ( (image=iopen(fname, "r")) == NULL ) {
-	err_setstr(ImgfileError, "Cannot open image file");
+	/* Error may already be set by imgfile_error */
+	if ( !error_called )
+	  err_setstr(ImgfileError, "Cannot open image file");
 	return 0;
     }
     strcpy(gfname, fname);
@@ -103,7 +116,7 @@
       return NULL;
     cdatap = getstringvalue(rv);
     idatap = (long *)cdatap;
-    for ( y=0; y < ysize; y++ ) {
+    for ( y=0; y < ysize && !error_called; y++ ) {
 	if ( zsize == 1 ) {
 	    getrow(image, rs, y, 0);
 	    for(x=0; x<xsize; x++ )
@@ -118,6 +131,10 @@
 		         ((bs[x] & 0xff)<<16);
 	}
     }
+    if ( error_called ) {
+	DECREF(rv);
+	return NULL;
+    }
     return rv;
 }