aboutsummaryrefslogtreecommitdiffstats
path: root/CNativeCode/Tool_JNI_funcs.c
diff options
context:
space:
mode:
Diffstat (limited to 'CNativeCode/Tool_JNI_funcs.c')
-rw-r--r--CNativeCode/Tool_JNI_funcs.c70
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 );
+}
+