From: Corey Minyard Date: Wed, 5 Sep 2001 17:48:18 +0000 (+0000) Subject: natClassLoader.cc: Include VirtualMachineError.h X-Git-Tag: prereleases/libstdc++-3.0.95~2243 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c946ec44f8df9914de1f6719db783a2b62be4fd7;p=thirdparty%2Fgcc.git natClassLoader.cc: Include VirtualMachineError.h 2001-09-05 Corey Minyard Tom Tromey * java/lang/natClassLoader.cc: Include VirtualMachineError.h (_Jv_RegisterClassHookDefault): Throw error if a class is registered twice. Co-Authored-By: Tom Tromey From-SVN: r45418 --- diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 0d0c66b53197..e867cbfcf7b9 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,10 @@ +2001-09-05 Corey Minyard + Tom Tromey + + * java/lang/natClassLoader.cc: Include VirtualMachineError.h + (_Jv_RegisterClassHookDefault): Throw error if a class is + registered twice. + 2001-09-05 Tom Tromey * java/lang/natSystem.cc (init_properties): Default locale is diff --git a/libjava/java/lang/natClassLoader.cc b/libjava/java/lang/natClassLoader.cc index 890a4a7d879f..70dea6db84a8 100644 --- a/libjava/java/lang/natClassLoader.cc +++ b/libjava/java/lang/natClassLoader.cc @@ -33,6 +33,7 @@ details. */ #include #include #include +#include #include #include #include @@ -453,6 +454,22 @@ void _Jv_RegisterClassHookDefault (jclass klass) { jint hash = HASH_UTF (klass->name); + + jclass check_class = loaded_classes[hash]; + + // If the class is already registered, don't re-register it. + while (check_class != NULL) + { + if (check_class == klass) + { + // If you get this, it means you have the same class in two + // different libraries. + throw new java::lang::VirtualMachineError (JvNewStringLatin1 ("class registered twice")); + } + + check_class = check_class->next; + } + klass->next = loaded_classes[hash]; loaded_classes[hash] = klass; }