From 9481d818d93d9debcfaa45192a0c259fa7b70df4 Mon Sep 17 00:00:00 2001
From: Ingo Proetel <proetel@aicas.com>
Date: Thu, 25 Sep 2003 19:06:20 +0000
Subject: [PATCH] ObjectOutputStream.java: Allow putFields be called more than
 once.

2003-09-25  Ingo Proetel  <proetel@aicas.com>

	* java/io/ObjectOutputStream.java:
	Allow putFields be called more than once.

From-SVN: r71791
---
 libjava/ChangeLog                       |  5 ++++
 libjava/java/io/ObjectOutputStream.java | 32 +++++++++++++++----------
 2 files changed, 24 insertions(+), 13 deletions(-)

diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 1cc5d7a5b896..143ec550b4a2 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,8 @@
+2003-09-25  Ingo Proetel  <proetel@aicas.com>
+
+	* java/io/ObjectOutputStream.java:
+	Allow putFields be called more than once.
+
 2003-09-25  Sascha Brawer  <brawer@dandelis.ch>
 
 	* java/awt/image/Raster.java(Raster): Interpret null origin as (0,0).
diff --git a/libjava/java/io/ObjectOutputStream.java b/libjava/java/io/ObjectOutputStream.java
index 1437a4f69186..3e47e70671f2 100644
--- a/libjava/java/io/ObjectOutputStream.java
+++ b/libjava/java/io/ObjectOutputStream.java
@@ -361,7 +361,7 @@ public class ObjectOutputStream extends OutputStream
 	  }
 	catch (IOException ioe)
 	  {
-	    throw new StreamCorruptedException ("Exception " + ioe + " thrown while exception was being written to stream.");
+	    throw new StreamCorruptedException ("Exception " + ioe + " thrown while exception ("+e+") was being written to stream.");
 	  }
 
 	reset (true);
@@ -443,7 +443,7 @@ public class ObjectOutputStream extends OutputStream
       throw new NotActiveException ("defaultWriteObject called by non-active class and/or object");
 
     if (fieldsAlreadyWritten)
-      throw new IOException ("Only one of putFields and defaultWriteObject may be called, and it may only be called once");
+      throw new IOException ("Only one of writeFields and defaultWriteObject may be called, and it may only be called once");
 
     fieldsAlreadyWritten = true;
   }
@@ -866,8 +866,8 @@ public class ObjectOutputStream extends OutputStream
 
   public PutField putFields () throws IOException
   {
-    markFieldsWritten ();
-
+    if (currentPutField == null)
+      {
     currentPutField = new PutField ()
       {
 	private byte[] prim_field_data
@@ -1002,6 +1002,7 @@ public class ObjectOutputStream extends OutputStream
 	}
       };
     // end PutFieldImpl
+      }
 
     return currentPutField;
   }
@@ -1012,7 +1013,12 @@ public class ObjectOutputStream extends OutputStream
     if (currentPutField == null)
       throw new NotActiveException ("writeFields can only be called after putFields has been called");
 
+	// moved here from putFields since putFields 
+	// may be called more than once, but not writeFields
+	markFieldsWritten();
+	
     currentPutField.write (this);
+    currentPutField = null;
   }
 
 
@@ -1248,7 +1254,7 @@ public class ObjectOutputStream extends OutputStream
       }
     catch (Exception _)
       {
-	throw new IOException ();
+	throw new IOException ("Unexpected Exception "+_);
       }    
   }
 
@@ -1263,7 +1269,7 @@ public class ObjectOutputStream extends OutputStream
       }
     catch (Exception _)
       {
-	throw new IOException ();
+	throw new IOException ("Unexpected Exception "+_);
       }    
   }
 
@@ -1278,7 +1284,7 @@ public class ObjectOutputStream extends OutputStream
       }
     catch (Exception _)
       {
-	throw new IOException ();
+	throw new IOException ("Unexpected Exception "+_);
       }    
   }
 
@@ -1293,7 +1299,7 @@ public class ObjectOutputStream extends OutputStream
       }
     catch (Exception _)
       {
-	throw new IOException ();
+	throw new IOException ("Unexpected Exception "+_);
       }    
   }
 
@@ -1308,7 +1314,7 @@ public class ObjectOutputStream extends OutputStream
       }
     catch (Exception _)
       {
-	throw new IOException ();
+	throw new IOException ("Unexpected Exception "+_);
       }    
   }
 
@@ -1323,7 +1329,7 @@ public class ObjectOutputStream extends OutputStream
       }
     catch (Exception _)
       {
-	throw new IOException ();
+	throw new IOException ("Unexpected Exception "+_);
       }    
   }
 
@@ -1338,7 +1344,7 @@ public class ObjectOutputStream extends OutputStream
       }
     catch (Exception _)
       {
-	throw new IOException ();
+	throw new IOException ("Unexpected Exception "+_);
       }    
   }
 
@@ -1353,7 +1359,7 @@ public class ObjectOutputStream extends OutputStream
       }
     catch (Exception _)
       {
-	throw new IOException ();
+	throw new IOException ("Unexpected Exception "+_);
       }    
   }
 
@@ -1369,7 +1375,7 @@ public class ObjectOutputStream extends OutputStream
       }
     catch (Exception _)
       {
-	throw new IOException ();
+	throw new IOException ("Unexpected Exception "+_);
       }    
   }
 
-- 
GitLab