Bug in JNI RegisterNatives?
Juerg Lehni
juerg@scratchdisk.com
Mon Jun 19 21:11:00 GMT 2006
Bryce,
> Thanks for the reminder. Ideally we should find a way to refer to
> klass->name directly rather than reading it as a String and
> converting it back to Utf8. Yes, doing it in this one instance
> doesn't hurt much, but it would simplify the patch a lot, and
> fixing it might come in useful elsewhere. Would the patch below help?
The patch does help. Another possibility would be to make that field
public...
I was wondering if the function should be called
_Jv_GetClassNameUtf8Const, to go well together with getNameUtf8Const
in jfieldID.
I changed my patch now, but could not test it as my build process is
currently broken, due to experiments with Java2D. I'm pretty sure it
will work though, as the only lines changed are the calls to
_Jv_GetClassNameUtf8...
> Also, was there a reason to change _Jv_AllocBytes() calls to
> _Jv_Malloc()?
Nothing I can remember now. What's the difference between the two
really? I changed it back in the above patch now.
> For large changes we need a GCC copyright assignment on file with
> the FSF. See: http://gcc.gnu.org/contribute.html - I think we can
> accept this under the "small changes" rule, however. But, if you
> plan to contribute more changes in the future, it might be a good
> idea to start the paperwork process now.
I don't plan to write more patches, so it should be fine for now.
Jürg
-------------- next part --------------
A non-text attachment was scrubbed...
Name: jni.patch
Type: application/octet-stream
Size: 5907 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/java/attachments/20060619/1fe51934/attachment.obj>
-------------- next part --------------
> Bryce
>>> Juerg Lehni wrote:
>> Tom,
>>>> Please let me know what I should do to get this patch finalized
>> and commited. I would like to make sure it's getting there soon.
>>>> Jürg
>> 2006年06月16日 Bryce McKinlay <mckinlay@redhat.com>
>> * java/lang/Class.h (_Jv_GetClassNameUtf8): New declaration.
> * java/lang/natClass.cc (_Jv_GetClassNameUtf8): Define.
>> Index: Class.h
> ===================================================================
> --- Class.h (revision 114642)
> +++ Class.h (working copy)
> @@ -231,6 +231,7 @@
> jmethodID _Jv_FromReflectedConstructor
> (java::lang::reflect::Constructor *);
> jint JvNumMethods (jclass);
> jmethodID JvGetFirstMethod (jclass);
> +_Jv_Utf8Const* _Jv_GetClassNameUtf8 (jclass);
>> #ifdef INTERPRETER
> // Finds a desired interpreter method in the given class or NULL
> if not found
> @@ -472,6 +473,7 @@
> friend jmethodID (::_Jv_FromReflectedConstructor)
> (java::lang::reflect::Constructor *);
> friend jint (::JvNumMethods) (jclass);
> friend jmethodID (::JvGetFirstMethod) (jclass);
> + friend _Jv_Utf8Const * ::_Jv_GetClassNameUtf8 (jclass);
> #ifdef INTERPRETER
> friend _Jv_InterpMethod* (::_Jv_FindInterpreterMethod) (jclass
> klass,
> jmethodID desired_method);
> Index: natClass.cc
> ===================================================================
> --- natClass.cc (revision 114642)
> +++ natClass.cc (working copy)
> @@ -1264,3 +1264,11 @@
> return NULL;
> }
> #endif
> +
> +// Return Utf8 name of a class. This function is here for code
> that can't access
> +// klass->name directly.
> +_Jv_Utf8Const*
> +_Jv_GetClassNameUtf8 (jclass klass)
> +{
> + return klass->name;
> +}
More information about the Java
mailing list