PatchSet 5884 
Date: 2005/01/22 18:21:39
Author: robilad
Branch: HEAD
Tag: (none) 
Log:
Resynced with GNU Classpath: serialization fixes

2005-01-22  Dalibor Topic  <[EMAIL PROTECTED]>

Resynced with GNU Classpath.

2005-01-18  Mark Wielaard  <[EMAIL PROTECTED]>

Fixes bug #11618.
* java/io/ObjectInputStream.java (readClassDescriptor): Handle classes
without a super class and us ObjectStreamClass.lookupForClassObject().
(resolveClass): Check for primitive types.
(lookupClass): Return null when argument is null.

Members: 
        ChangeLog:1.3425->1.3426 
        libraries/javalib/java/io/ObjectInputStream.java:1.46->1.47 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.3425 kaffe/ChangeLog:1.3426
--- kaffe/ChangeLog:1.3425      Sat Jan 22 18:04:52 2005
+++ kaffe/ChangeLog     Sat Jan 22 18:21:39 2005
@@ -2,6 +2,49 @@
 
        Resynced with GNU Classpath.
        
+       2005-01-19  Graydon Hoare  <[EMAIL PROTECTED]>
+
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c:
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c:
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c:
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c:
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c:
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c:
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c:
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c:
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c:
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c:
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c:
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c:
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c:
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c:
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c:
+       Rewrite uses of extern variable to be function calls.
+       * native/jni/gtk-peer/gtkpeer.h (gdk_env): Change declaration to
+       function, from extern variable.
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
+       (gdk_env): Remove variable, add new function.
+       (java_vm): Add new variable.
+       (Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkInit): Initialize
+       java_vm rather than old gdk_env variable.
+       
+2005-01-22  Dalibor Topic  <[EMAIL PROTECTED]>
+
+       Resynced with GNU Classpath.
+       
+       2005-01-18  Mark Wielaard  <[EMAIL PROTECTED]>
+
+       Fixes bug #11618.
+       * java/io/ObjectInputStream.java (readClassDescriptor): Handle classes
+       without a super class and us ObjectStreamClass.lookupForClassObject().
+       (resolveClass): Check for primitive types.
+       (lookupClass): Return null when argument is null.
+
+2005-01-22  Dalibor Topic  <[EMAIL PROTECTED]>
+
+       Resynced with GNU Classpath.
+       
        2005-01-19  Andrew John Hughes  <[EMAIL PROTECTED]>
 
        Merge of java.lang.Appendable to HEAD from
Index: kaffe/libraries/javalib/java/io/ObjectInputStream.java
diff -u kaffe/libraries/javalib/java/io/ObjectInputStream.java:1.46 
kaffe/libraries/javalib/java/io/ObjectInputStream.java:1.47
--- kaffe/libraries/javalib/java/io/ObjectInputStream.java:1.46 Wed Dec  8 
16:51:55 2004
+++ kaffe/libraries/javalib/java/io/ObjectInputStream.java      Sat Jan 22 
18:21:56 2005
@@ -1,5 +1,6 @@
 /* ObjectInputStream.java -- Class used to read serialized objects
-   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, 
Inc.
+   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005
+   Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -536,8 +537,14 @@
     // find the first non-serializable, non-abstract
     // class in clazz's inheritance hierarchy
     Class first_nonserial = clazz.getSuperclass();
-    while (Serializable.class.isAssignableFrom(first_nonserial)
-       || Modifier.isAbstract(first_nonserial.getModifiers()))
+    // Maybe it is a primitive class, those don't have a super class,
+    // or Object itself.  Otherwise we can keep getting the superclass
+    // till we hit the Object class, or some other non-serializable class.
+    if (first_nonserial == null)
+      first_nonserial = clazz;
+    else
+      while (Serializable.class.isAssignableFrom(first_nonserial)
+            || Modifier.isAbstract(first_nonserial.getModifiers()))
        first_nonserial = first_nonserial.getSuperclass();
 
     final Class local_constructor_class = first_nonserial;
@@ -567,7 +574,7 @@
     osc.realClassIsExternalizable = 
Externalizable.class.isAssignableFrom(clazz);
 
     ObjectStreamField[] stream_fields = osc.fields;
-    ObjectStreamField[] real_fields = ObjectStreamClass.lookup(clazz).fields;
+    ObjectStreamField[] real_fields = 
ObjectStreamClass.lookupForClassObject(clazz).fields;
     ObjectStreamField[] fieldmapping = new ObjectStreamField[2 * 
Math.max(stream_fields.length, real_fields.length)];
 
     int stream_idx = 0;
@@ -733,7 +740,37 @@
   protected Class resolveClass(ObjectStreamClass osc)
     throws ClassNotFoundException, IOException
   {
-    return Class.forName(osc.getName(), true, currentLoader());
+    try
+      {
+       return Class.forName(osc.getName(), true, currentLoader());
+      }
+    catch (ClassNotFoundException cnfe)
+      {
+       // Maybe it was an primitive class?
+       String name = osc.getName();
+       if (name.equals("void"))
+         return Void.TYPE;
+       if (name.equals("boolean"))
+         return Boolean.TYPE;
+       if (name.equals("byte"))
+         return Byte.TYPE;
+       if (name.equals("short"))
+         return Short.TYPE;
+       if (name.equals("char"))
+         return Character.TYPE;
+       if (name.equals("int"))
+         return Integer.TYPE;
+       if (name.equals("long"))
+         return Long.TYPE;
+       if (name.equals("float"))
+         return Float.TYPE;
+       if (name.equals("double"))
+         return Double.TYPE;
+       if (name.equals("void"))
+         return Void.TYPE;
+
+       throw cnfe;
+      }
   }
 
   /**
@@ -766,8 +803,10 @@
    */
   private ObjectStreamClass lookupClass(Class clazz)
   {
-    ObjectStreamClass oclazz;
+    if (clazz == null)
+      return null;
 
+    ObjectStreamClass oclazz;
     oclazz = (ObjectStreamClass)classLookupTable.get(clazz);
     if (oclazz == null)
       return ObjectStreamClass.lookup(clazz);

_______________________________________________
kaffe mailing list
[email protected]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to