diff options
Diffstat (limited to 'libjava/testsuite/libjava.jni/martin.c')
-rw-r--r-- | libjava/testsuite/libjava.jni/martin.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/libjava/testsuite/libjava.jni/martin.c b/libjava/testsuite/libjava.jni/martin.c new file mode 100644 index 0000000..31f53e1 --- /dev/null +++ b/libjava/testsuite/libjava.jni/martin.c @@ -0,0 +1,41 @@ +#include <jni.h> +#include "martin.h" +#include <stdio.h> + +void Java_martin_myNative(JNIEnv* env, jobject this, jstring s) +{ + jclass cls; + jfieldID fid; + jobject obj; + jmethodID mid; + + printf("From C\n"); + + cls = (*env)->FindClass(env, "java/lang/System"); + if (cls == 0) { + printf("java/lang/System lookup failed\n"); + return; + } + fid = (*env)->GetStaticFieldID(env, cls, "out", "Ljava/io/PrintStream;"); + if (fid == 0) { + printf("java/lang/System::out lookup failed\n"); + return; + } + obj = (*env)->GetStaticObjectField(env, cls, fid); + if (obj == 0) { + printf("GetStaticObjectField call failed\n"); + return; + } + cls = (*env)->GetObjectClass(env, obj); + if (cls == 0) { + printf("GetObjectClass(out) failed\n"); + return; + } + mid = (*env)->GetMethodID(env, cls, "println", "(Ljava/lang/String;)V"); + if (mid == 0) { + printf("println method lookup failed\n"); + return; + } + (*env)->CallVoidMethod(env, obj, mid, s); +} + |