Authors: ?
- $Id: jni.c 669 2003-11-23 14:04:20Z edwin $
+ $Id: jni.c 673 2003-11-23 22:14:35Z jowenn $
*/
}
-
+/*XXX it could be considered if we should do typechecking here in the future */
void fill_callblock(void *obj,utf *descr,jni_callblock blk[], va_list data, char ret) {
char *utf__ptr = descr->text; /* current position in utf-text */
char **utf_ptr = &utf__ptr;
break;
}
case '[' : {
- /* XXX need arrayclass change? */
+ /* XXX need arrayclass change? no.*/
/* arrayclass */
char *start = *utf_ptr;
char ch;
return &(c->fields[i]);
}
+ if (c->super) return jclass_findfield(c->super,name,desc);
+
return NULL;
}
{
classinfo *c;
- if (strcmp(name,"[B")==0) {
+/* if (strcmp(name,"[B")==0) {
c = loader_load(utf_new_char("The_Array_Class"));
}
- else
+ else*/
c = loader_load(utf_new_char_classname ((char *) name));
if (!c) exceptionptr = native_new_and_init(class_java_lang_ClassFormatError);
{
jfieldID f;
+/* log_text("========================= searching for:");
+ log_text(name);
+ log_text(sig);*/
f = jclass_findfield(clazz,
utf_new_char ((char*) name),
utf_new_char ((char*) sig)
);
- if (!f) exceptionptr = native_new_and_init(class_java_lang_NoSuchFieldError);
-
+ if (!f) {
+/* utf_display(clazz->name);
+ log_text(name);
+ log_text(sig);*/
+ exceptionptr = native_new_and_init(class_java_lang_NoSuchFieldError);
+ }
return f;
}
jfieldID getFieldID_critical(JNIEnv *env,jclass clazz,const char *name,const char *sig)
{
jfieldID id = GetFieldID(env,clazz,name,sig);
- if (!id) panic("setfield_critical failed");
+
+ if (!id) {
+ log_text("class:");
+ utf_display(clazz->name);
+ log_text("\nfield:");
+ log_text(name);
+ log_text("sig:");
+ log_text(sig);
+
+ panic("setfield_critical failed");
+ }
return id;
}
return (jstring) s;
}
+
+static char emptyString[]="";
+
/******************* returns the length of a Java string ***************************/
jsize GetStringLength (JNIEnv *env, jstring str)
const jchar *GetStringChars (JNIEnv *env, jstring str, jboolean *isCopy)
{
- return javastring_tou2(str);
+ jchar *jc=javastring_tou2(str);
+
+ if (jc) {
+ if (isCopy) *isCopy=JNI_TRUE;
+ return jc;
+ }
+ if (isCopy) *isCopy=JNI_TRUE;
+ return emptyString;
}
/**************** native code no longer needs access to chars **********************/
void ReleaseStringChars (JNIEnv *env, jstring str, const jchar *chars)
{
- MFREE(((jchar*) chars),jchar,((java_lang_String*) str)->count);
+ if (chars==emptyString) return;
+ MFREE(((jchar*) chars),jchar,((java_lang_String*) str)->count+1);
}
/************ create new java.lang.String object from utf8-characterarray **********/
const char* GetStringUTFChars (JNIEnv *env, jstring string, jboolean *isCopy)
{
+ utf *u;
if (verbose) log_text("GetStringUTFChars:");
- return javastring_toutf((java_lang_String*) string,false)->text;
+ u=javastring_toutf((java_lang_String*) string,false);
+ if (isCopy) *isCopy=JNI_FALSE;
+ if (u) {
+ return u->text;
+ }
+ return emptyString;
}
void ReleaseStringUTFChars (JNIEnv *env, jstring str, const char* chars)
{
+ /*we don't release utf chars right now, perhaps that should be done later. Since there is always one reference
+ the garbage collector will never get them*/
/*
log_text("JNI-Call: ReleaseStringUTFChars");
utf_display(utf_new_char(chars));