Commit f1b2b25c by Anthony Green Committed by Anthony Green

jni.cc (nathash_add): Don't strdup the method signature.

2005-02-13  Anthony Green  <green@redhat.com>

        * jni.cc (nathash_add): Don't strdup the method signature.
        (_Jv_JNI_RegisterNatives): Convert the slashes to dots in the
        method signature.
        Update copyright.

From-SVN: r95010
parent 4230cec2
2005-02-13 Anthony Green <green@redhat.com>
* jni.cc (nathash_add): Don't strdup the method signature.
(_Jv_JNI_RegisterNatives): Convert the slashes to dots in the
method signature.
Update copyright.
2005-02-12 Mark Wielaard <mark@klomp.org> 2005-02-12 Mark Wielaard <mark@klomp.org>
Fixes bug libgcj/8170 Fixes bug libgcj/8170
......
// jni.cc - JNI implementation, including the jump table. // jni.cc - JNI implementation, including the jump table.
/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation Free Software Foundation
This file is part of libgcj. This file is part of libgcj.
...@@ -1880,7 +1880,8 @@ nathash_add (const JNINativeMethod *method) ...@@ -1880,7 +1880,8 @@ nathash_add (const JNINativeMethod *method)
return; return;
// FIXME // FIXME
slot->name = strdup (method->name); slot->name = strdup (method->name);
slot->signature = strdup (method->signature); // This was already strduped in _Jv_JNI_RegisterNatives.
slot->signature = method->signature;
slot->fnPtr = method->fnPtr; slot->fnPtr = method->fnPtr;
} }
...@@ -1894,6 +1895,8 @@ _Jv_JNI_RegisterNatives (JNIEnv *env, jclass klass, ...@@ -1894,6 +1895,8 @@ _Jv_JNI_RegisterNatives (JNIEnv *env, jclass klass,
// the nathash table. // the nathash table.
JvSynchronize sync (global_ref_table); JvSynchronize sync (global_ref_table);
JNINativeMethod dottedMethod;
// Look at each descriptor given us, and find the corresponding // Look at each descriptor given us, and find the corresponding
// method in the class. // method in the class.
for (int j = 0; j < nMethods; ++j) for (int j = 0; j < nMethods; ++j)
...@@ -1905,15 +1908,28 @@ _Jv_JNI_RegisterNatives (JNIEnv *env, jclass klass, ...@@ -1905,15 +1908,28 @@ _Jv_JNI_RegisterNatives (JNIEnv *env, jclass klass,
{ {
_Jv_Method *self = &imeths[i]; _Jv_Method *self = &imeths[i];
if (! strcmp (self->name->chars (), methods[j].name) // Copy this JNINativeMethod and do a slash to dot
&& ! strcmp (self->signature->chars (), methods[j].signature)) // conversion on the signature.
dottedMethod.name = methods[j].name;
dottedMethod.signature = strdup (methods[j].signature);
dottedMethod.fnPtr = methods[j].fnPtr;
char *c = dottedMethod.signature;
while (*c)
{
if (*c == '/')
*c = '.';
c++;
}
if (! strcmp (self->name->chars (), dottedMethod.name)
&& ! strcmp (self->signature->chars (), dottedMethod.signature))
{ {
if (! (self->accflags & java::lang::reflect::Modifier::NATIVE)) if (! (self->accflags & java::lang::reflect::Modifier::NATIVE))
break; break;
// Found a match that is native. // Found a match that is native.
found = true; found = true;
nathash_add (&methods[j]); nathash_add (&dottedMethod);
break; break;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment