Make error handling more consistent with other TurboJPEG C code


git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/trunk@481 632fc199-4ca6-4c93-a231-07263d6284db
diff --git a/jpgtest.c b/jpgtest.c
index e46197b..06efa49 100644
--- a/jpgtest.c
+++ b/jpgtest.c
@@ -24,7 +24,8 @@
 #include "./turbojpeg.h"
 
 #define _throw(op, err) {  \
-	printf("ERROR in line %d while %s:\n%s\n", __LINE__, op, err);  goto bailout;}
+	printf("ERROR in line %d while %s:\n%s\n", __LINE__, op, err);  \
+  retval=-1;  goto bailout;}
 #define _throwunix(m) _throw(m, strerror(errno))
 #define _throwtj(m) _throw(m, tjGetErrorStr())
 #define _throwbmp(m) _throw(m, bmpgeterr())
@@ -74,7 +75,7 @@
 	int flags=(forcemmx?TJ_FORCEMMX:0)|(forcesse?TJ_FORCESSE:0)
 		|(forcesse2?TJ_FORCESSE2:0)|(forcesse3?TJ_FORCESSE3:0)
 		|(fastupsample?TJ_FASTUPSAMPLE:0);
-	int i, j, ITER, rgbbufalloc=0;
+	int i, j, ITER, rgbbufalloc=0, retval=0;
 	double start, elapsed;
 	int ps=_ps[pf];
 	int yuvsize=TJBUFSIZEYUV(w, h, jpegsub), bufsize;
@@ -203,15 +204,11 @@
 		}
 	}
 
-	if(hnd) {tjDestroy(hnd);  hnd=NULL;}
-	if(rgbbuf && rgbbufalloc) {free(rgbbuf);  rgbbuf=NULL;}
-	return 0;
-
 	bailout:
 	if(outfile) {fclose(outfile);  outfile=NULL;}
 	if(hnd) {tjDestroy(hnd);  hnd=NULL;}
 	if(rgbbuf && rgbbufalloc) {free(rgbbuf);  rgbbuf=NULL;}
-	return -1;
+	return retval;
 }
 
 void dotest(unsigned char *srcbuf, int w, int h, int jpegsub, int qual,
@@ -222,7 +219,7 @@
 	unsigned char **jpegbuf=NULL, *rgbbuf=NULL;
 	double start, elapsed;
 	int jpgbufsize=0, i, j, tilesizex=w, tilesizey=h, numtilesx=1, numtilesy=1,
-		ITER;
+		ITER, retval=0;
 	unsigned long *comptilesize=NULL;
 	int flags=(forcemmx?TJ_FORCEMMX:0)|(forcesse?TJ_FORCESSE:0)
 		|(forcesse2?TJ_FORCESSE2:0)|(forcesse3?TJ_FORCESSE3:0)
@@ -361,19 +358,12 @@
 			goto bailout;
 
 		// Cleanup
-		if(outfile) {fclose(outfile);  outfile=NULL;}
-		if(jpegbuf)
-		{
-			for(i=0; i<numtilesx*numtilesy; i++)
-				{if(jpegbuf[i]) free(jpegbuf[i]);  jpegbuf[i]=NULL;}
-			free(jpegbuf);  jpegbuf=NULL;
-		}
-		if(comptilesize) {free(comptilesize);  comptilesize=NULL;}
+		for(i=0; i<numtilesx*numtilesy; i++)
+			{if(jpegbuf[i]) free(jpegbuf[i]);  jpegbuf[i]=NULL;}
+		free(jpegbuf);  jpegbuf=NULL;
+		free(comptilesize);  comptilesize=NULL;
 	} while(tilesizex<w || tilesizey<h);
 
-	if(rgbbuf) {free(rgbbuf);  rgbbuf=NULL;}
-	return;
-
 	bailout:
 	if(outfile) {fclose(outfile);  outfile=NULL;}
 	if(jpegbuf)
@@ -396,7 +386,7 @@
 	unsigned long *comptilesize=NULL, srcbufsize, jpgbufsize;
 	int w=0, h=0, jpegsub=-1;
 	char *temp=NULL;
-	int i, j, tilesizex, tilesizey, numtilesx, numtilesy;
+	int i, j, tilesizex, tilesizey, numtilesx, numtilesy, retval=0;
 	double start, elapsed;
 	int flags=(forcemmx?TJ_FORCEMMX:0)|(forcesse?TJ_FORCESSE:0)
 		|(forcesse2?TJ_FORCESSE2:0)|(forcesse3?TJ_FORCESSE3:0);
@@ -601,7 +591,7 @@
 {
 	unsigned char *bmpbuf=NULL;  int w, h, i, j;
 	int qual=-1, hiqual=-1;  char *temp;
-	int minarg=2;
+	int minarg=2;  int retval=0;
 
 	if((sf=tjGetScalingFactors(&nsf))==NULL || nsf==0)
 		_throwtj("executing tjGetScalingFactors()");
@@ -749,10 +739,7 @@
 		dotest(bmpbuf, w, h, TJ_444, i, argv[1]);
 	printf("\n");
 
-	if(bmpbuf) free(bmpbuf);
-	return 0;
-
 	bailout:
 	if(bmpbuf) free(bmpbuf);
-	return 1;
+	return retval;
 }