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;
}