diff options
Diffstat (limited to 'CNativeCode/Tool_JNI_funcs.c')
-rw-r--r-- | CNativeCode/Tool_JNI_funcs.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/CNativeCode/Tool_JNI_funcs.c b/CNativeCode/Tool_JNI_funcs.c new file mode 100644 index 0000000..3606a76 --- /dev/null +++ b/CNativeCode/Tool_JNI_funcs.c @@ -0,0 +1,70 @@ +#include "jnitools.h" + +JNIEXPORT jlong JNICALL +Java_gl4java_utils_Tool_tmpfileCreate ( + JNIEnv *env, jobject obj ) +{ + return (jlong) ((PointerHolder)tmpfile()); +} + +JNIEXPORT jboolean JNICALL +Java_gl4java_utils_Tool_tmpfileClose ( + JNIEnv *env, jobject obj, jlong filed ) +{ + return ( fclose( (FILE *) ((PointerHolder)filed) ) == 0 ) ? + JNI_TRUE : JNI_FALSE; +} + +JNIEXPORT jint JNICALL +Java_gl4java_utils_Tool_tmpfileWrite ( + JNIEnv *env, jobject obj, jlong filed, jbyteArray data, int bytes) +{ + jint len; + jbyte * ptr = NULL; + + if(data==NULL || filed==0) return 0; + + len = (*env)->GetArrayLength(env, data); + if( 0 >= bytes || bytes>len ) bytes=len; + + ptr = (*env)->GetByteArrayElements(env, data, NULL); + + len = (jint) fwrite ( (void *) ptr, bytes, 1, + (FILE *) ((PointerHolder)filed) ); + + /* NO copy back, free the memory .. */ + (*env)->ReleaseByteArrayElements(env, data, ptr, JNI_ABORT); + + return len; +} + +JNIEXPORT jint JNICALL +Java_gl4java_utils_Tool_tmpfileRead ( + JNIEnv *env, jobject obj, jlong filed, jbyteArray data, int bytes) +{ + jint len; + jbyte * ptr = NULL; + + if(data==NULL || filed==0) return 0; + + len = (*env)->GetArrayLength(env, data); + if( 0 >= bytes || bytes>len ) bytes=len; + + ptr = (*env)->GetByteArrayElements(env, data, NULL); + + len = (jint) fread ( (void *) ptr, bytes, 1, + (FILE *) ((PointerHolder)filed) ); + + /* copy back and free the memory .. */ + (*env)->ReleaseByteArrayElements(env, data, ptr, 0); + + return len; +} + +JNIEXPORT void JNICALL +Java_gl4java_utils_Tool_tmpfileRewind ( + JNIEnv *env, jobject obj, jlong filed) +{ + (void) fseek ( (FILE *) ((PointerHolder)filed), 0L, SEEK_SET ); +} + |