Improved error handling.

This commit is contained in:
Guido van Rossum 1992-03-23 18:21:32 +00:00
parent b3a0e4c842
commit 3e94197a52
1 changed files with 19 additions and 2 deletions

View 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,12 +61,16 @@ 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 ) {
/* Error may already be set by imgfile_error */
if ( !error_called )
err_setstr(ImgfileError, "Cannot open image file");
return 0;
}
@ -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;
}