More JNI cleanup + added unit test and fixed bugs uncovered by it


git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/trunk@431 632fc199-4ca6-4c93-a231-07263d6284db
diff --git a/turbojpeg-jni.c b/turbojpeg-jni.c
index 1e0a353..f2f34ee 100644
--- a/turbojpeg-jni.c
+++ b/turbojpeg-jni.c
@@ -41,28 +41,27 @@
 
 #define bailif0(f) {if(!(f)) goto bailout;}
 
-#define gethandle() {  \
+#define gethandle()  \
 	jclass _cls=(*env)->GetObjectClass(env, obj);  \
 	jfieldID _fid;  \
 	if(!_cls) goto bailout;  \
 	bailif0(_fid=(*env)->GetFieldID(env, _cls, "handle", "J"));  \
 	handle=(tjhandle)(long)(*env)->GetLongField(env, obj, _fid);  \
-}
 
-JNIEXPORT jlong JNICALL Java_org_libjpegturbo_turbojpeg_TJ_bufSize
+JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJ_bufSize
 	(JNIEnv *env, jclass cls, jint width, jint height)
 {
-	jlong retval=TJBUFSIZE(width, height);
+	jint retval=(jint)TJBUFSIZE(width, height);
 	if(retval==-1) _throw(tjGetErrorStr());
 
 	bailout:
 	return retval;
 }
 
-JNIEXPORT jlong JNICALL Java_org_libjpegturbo_turbojpeg_TJ_bufSizeYUV
+JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJ_bufSizeYUV
 	(JNIEnv *env, jclass cls, jint width, jint height, jint subsamp)
 {
-	jlong retval=TJBUFSIZEYUV(width, height, subsamp);
+	jint retval=(jint)TJBUFSIZEYUV(width, height, subsamp);
 	if(retval==-1) _throw(tjGetErrorStr());
 
 	bailout:
@@ -87,7 +86,7 @@
 	return;
 }
 
-JNIEXPORT jlong JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress
+JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress
 	(JNIEnv *env, jobject obj, jbyteArray src, jint width, jint pitch,
 		jint height, jint pixelsize, jbyteArray dst, jint jpegsubsamp,
 		jint jpegqual, jint flags)
@@ -112,7 +111,7 @@
 	bailout:
 	if(dstbuf) (*env)->ReleasePrimitiveArrayCritical(env, dst, dstbuf, 0);
 	if(srcbuf) (*env)->ReleasePrimitiveArrayCritical(env, src, srcbuf, 0);
-	return size;
+	return (jint)size;
 }
 
 JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_destroy
@@ -123,6 +122,7 @@
 	gethandle();
 
 	if(tjDestroy(handle)==-1) _throw(tjGetErrorStr());
+	(*env)->SetLongField(env, obj, _fid, 0);
 
 	bailout:
 	return;
@@ -169,15 +169,12 @@
 	return output_height;
 }
 
-JNIEXPORT jobject JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompressHeader
-	(JNIEnv *env, jobject obj, jbyteArray src, jlong size)
+JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompressHeader
+	(JNIEnv *env, jobject obj, jbyteArray src, jint size)
 {
-	jclass jhicls=NULL;
-	jfieldID fid;
 	tjhandle handle=0;
 	unsigned char *srcbuf=NULL;
 	int width=0, height=0, jpegsubsamp=-1;
-	jobject jhiobj=NULL;
 
 	gethandle();
 
@@ -191,22 +188,19 @@
 	}
 	(*env)->ReleasePrimitiveArrayCritical(env, src, srcbuf, 0);  srcbuf=NULL;
 
-	bailif0(jhicls=(*env)->FindClass(env, "org/libjpegturbo/turbojpeg/TJHeaderInfo"));
-	bailif0(jhiobj=(*env)->AllocObject(env, jhicls));
-
-	bailif0(fid=(*env)->GetFieldID(env, jhicls, "subsamp", "I"));
-	(*env)->SetIntField(env, jhiobj, fid, jpegsubsamp);
-	bailif0(fid=(*env)->GetFieldID(env, jhicls, "width", "I"));
-	(*env)->SetIntField(env, jhiobj, fid, width);
-	bailif0(fid=(*env)->GetFieldID(env, jhicls, "height", "I"));
-	(*env)->SetIntField(env, jhiobj, fid, height);
+	bailif0(_fid=(*env)->GetFieldID(env, _cls, "jpegSubsamp", "I"));
+	(*env)->SetIntField(env, obj, _fid, jpegsubsamp);
+	bailif0(_fid=(*env)->GetFieldID(env, _cls, "jpegWidth", "I"));
+	(*env)->SetIntField(env, obj, _fid, width);
+	bailif0(_fid=(*env)->GetFieldID(env, _cls, "jpegHeight", "I"));
+	(*env)->SetIntField(env, obj, _fid, height);
 
 	bailout:
-	return jhiobj;
+	return;
 }
 
 JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress
-	(JNIEnv *env, jobject obj, jbyteArray src, jlong size, jbyteArray dst,
+	(JNIEnv *env, jobject obj, jbyteArray src, jint size, jbyteArray dst,
 		jint width, jint pitch, jint height, jint pixelsize, jint flags)
 {
 	tjhandle handle=0;