gcc/libjava/testsuite/libjava.jni/martin.c

44 lines
1001 B
C
Raw Normal View History

#include <jni.h>
#include "martin.h"
#include <stdio.h>
JNIEXPORT void JNICALL
Java_martin_myNative(JNIEnv* env, jobject this, jstring s)
{
jclass cls;
jfieldID fid;
jobject obj;
jmethodID mid;
printf("From C\n");
fflush(stdout);
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);
}