]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Improved error handling.
authorGuido van Rossum <guido@python.org>
Mon, 23 Mar 1992 18:21:32 +0000 (18:21 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 23 Mar 1992 18:21:32 +0000 (18:21 +0000)
Modules/imgfile.c

index 4c452d656c957b264ce111e8c6c9f14162e4dd00..8bf6d0642071dd4b2fdecbf751e14a583a801f99 100644 (file)
@@ -43,6 +43,15 @@ static object * ImgfileError;
 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 @@ imgfile_open(args)
     
     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 @@ imgfile_read(self, args)
       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 @@ imgfile_read(self, args)
                         ((bs[x] & 0xff)<<16);
        }
     }
+    if ( error_called ) {
+       DECREF(rv);
+       return NULL;
+    }
     return rv;
 }