aboutsummaryrefslogtreecommitdiffstats
path: root/CNativeCode/jni12tools.c
diff options
context:
space:
mode:
Diffstat (limited to 'CNativeCode/jni12tools.c')
-rw-r--r--CNativeCode/jni12tools.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/CNativeCode/jni12tools.c b/CNativeCode/jni12tools.c
index 8e2cc37..afe60ad 100644
--- a/CNativeCode/jni12tools.c
+++ b/CNativeCode/jni12tools.c
@@ -347,9 +347,16 @@ jarray LIBAPIENTRY jnitoolsNativePtrArray2JavaArray (JNIEnv *env,
errText, arg);
return 0;
}
- for(i=0; i<pointerNumber; i++)
+ for(i=0; data!=NULL && i<pointerNumber; i++)
+ {
+ if(data[i]!=NULL)
+ {
memcpy(buffer+i*setLenBytes,
data[i], setLenBytes);
+ } else {
+ memset(buffer+i*setLenBytes, 0, setLenBytes);
+ }
+ }
res = jnitoolsNativeArray2JavaArray (env, jbt,
buffer, dataArrayLen,
@@ -368,6 +375,8 @@ void LIBAPIENTRY jnitoolsReleaseJavaArray2NativeArray (JNIEnv *env, jarray arr,
if(!isinit && init(env)) isinit=1;
+ if(data==NULL) return;
+
if(len!=dataArrayLen)
{
jnitoolsThrowByName(env, "java/lang/IllegalArgumentException",
@@ -429,6 +438,8 @@ void LIBAPIENTRY jnitoolsReleaseJavaArray2NativeArrayPtr (JNIEnv *env,
if(!isinit && init(env)) isinit=1;
+ if(data==NULL) return;
+
if(len!=dataArrayLen)
{
jnitoolsThrowByName(env, "java/lang/IllegalArgumentException",
@@ -470,8 +481,10 @@ void LIBAPIENTRY jnitoolsReleaseJavaArray2NativeArrayPtr (JNIEnv *env,
"%s(arg #%d): Type is not an array", errText, arg);
}
for(i=0; i<pointerNumber; i++)
- memcpy(data[i], arrdata+i*setLenBytes,
- setLenBytes);
+ if(data[i]!=NULL)
+ memcpy(data[i], arrdata+i*setLenBytes,
+ setLenBytes);
+
(*env)->ReleasePrimitiveArrayCritical(env, arr, arrdata, JNI_ABORT);
}