summaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2001-09-05 17:48:18 +0000
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2001-09-05 17:48:18 +0000
commit681862de8c48e7326c662d130b55cad0ba044a8e (patch)
tree883d30c25b30bb57d4b45b846e61dc39052a33ec /libjava
parent5cfe55fbb3f97ea0f7d5d04496a2bfa8c1d4ce27 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--libjava/java/lang/natClassLoader.cc17
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;
}