diff options
author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-09-05 17:48:18 +0000 |
---|---|---|
committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-09-05 17:48:18 +0000 |
commit | 681862de8c48e7326c662d130b55cad0ba044a8e (patch) | |
tree | 883d30c25b30bb57d4b45b846e61dc39052a33ec /libjava | |
parent | 5cfe55fbb3f97ea0f7d5d04496a2bfa8c1d4ce27 (diff) | |
download | gcc-681862de8c48e7326c662d130b55cad0ba044a8e.tar.gz |
2001-09-05 Corey Minyard <minyard@acm.org>
Tom Tromey <tromey@redhat.com>
* java/lang/natClassLoader.cc: Include VirtualMachineError.h
(_Jv_RegisterClassHookDefault): Throw error if a class is
registered twice.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@45418 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava')
-rw-r--r-- | libjava/ChangeLog | 7 | ||||
-rw-r--r-- | libjava/java/lang/natClassLoader.cc | 17 |
2 files changed, 24 insertions, 0 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 0d0c66b5319..e867cbfcf7b 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,10 @@ +2001-09-05 Corey Minyard <minyard@acm.org> + Tom Tromey <tromey@redhat.com> + + * java/lang/natClassLoader.cc: Include VirtualMachineError.h + (_Jv_RegisterClassHookDefault): Throw error if a class is + registered twice. + 2001-09-05 Tom Tromey <tromey@redhat.com> * java/lang/natSystem.cc (init_properties): Default locale is diff --git a/libjava/java/lang/natClassLoader.cc b/libjava/java/lang/natClassLoader.cc index 890a4a7d879..70dea6db84a 100644 --- a/libjava/java/lang/natClassLoader.cc +++ b/libjava/java/lang/natClassLoader.cc @@ -33,6 +33,7 @@ details. */ #include <java/lang/ClassNotFoundException.h> #include <java/lang/ClassCircularityError.h> #include <java/lang/IncompatibleClassChangeError.h> +#include <java/lang/VirtualMachineError.h> #include <java/lang/reflect/Modifier.h> #include <java/lang/Runtime.h> #include <java/lang/StringBuffer.h> @@ -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; } |