From: Bryce McKinlay <bryce@albatross.co.nz>
Date: Sat, 27 Jan 2001 06:04:29 +0000 (+0000)
Subject: ObjectInputStream.java (read): AND byte with 0xff to make result unsigned.
X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=60b7365f52d635016272d4622b0c8a3df30205c8;p=gcc.git

ObjectInputStream.java (read): AND byte with 0xff to make result unsigned.

	* java/io/ObjectInputStream.java (read): AND byte with 0xff to make
	result unsigned.
	(read (byte[], int, int)): Only call readNextBlock() if the block
	buffer would actually be overrun. Increment blockDataPosition.
	(callReadMethod): Propagate exceptions from invocation target.
	* java/io/ObjectOutputStream.java (callWriteMethod): Propagate
	exceptions from invocation target.

From-SVN: r39293
---

diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 55fb358c473..b4916054ca8 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,13 @@
+2001-01-27  Bryce McKinlay  <bryce@albatross.co.nz>
+
+	* java/io/ObjectInputStream.java (read): AND byte with 0xff to make
+	result unsigned.
+	(read (byte[], int, int)): Only call readNextBlock() if the block 
+	buffer would actually be overrun. Increment blockDataPosition.
+	(callReadMethod): Propagate exceptions from invocation target.
+	* java/io/ObjectOutputStream.java (callWriteMethod): Propagate 
+	exceptions from invocation target.
+
 2001-01-26  Tom Tromey  <tromey@redhat.com>
 
 	* jni.cc (_Jv_JNI_GetAnyMethodID): Rewrite signature from external
diff --git a/libjava/java/io/ObjectInputStream.java b/libjava/java/io/ObjectInputStream.java
index 595e9de6854..9c10d58388d 100644
--- a/libjava/java/io/ObjectInputStream.java
+++ b/libjava/java/io/ObjectInputStream.java
@@ -577,21 +577,23 @@ public class ObjectInputStream extends InputStream
     {
       if (this.blockDataPosition >= this.blockDataBytes)
 	readNextBlock ();
-      return this.blockData[this.blockDataPosition++];
+      return (this.blockData[this.blockDataPosition++] & 0xff);
     }
     else
       return this.realInputStream.read ();
   }
 
-  public int read (byte data[], int offset, int length) throws IOException
+  public int read (byte[] data, int offset, int length) throws IOException
   {
     if (this.readDataFromBlock)
     {
-      if (this.blockDataPosition + length >= this.blockDataBytes)
+      if (this.blockDataPosition + length > this.blockDataBytes)
 	readNextBlock ();
 
       System.arraycopy (this.blockData, this.blockDataPosition,
 			data, offset, length);
+      blockDataPosition += length;	
+
       return length;
     }
     else
@@ -1359,16 +1361,29 @@ public class ObjectInputStream extends InputStream
   {
     try
       {
-	Class classArgs[] = {Class.forName ("java.io.ObjectInputStream")};
+	Class classArgs[] = {ObjectInputStream.class};
 	Method m = getMethod (klass, "readObject", classArgs);
 	if (m == null)
 	  return;
 	Object args[] = {this};
-	m.invoke (obj, args);	
+	m.invoke (obj, args);
       }
-    catch (Exception _)
+    catch (InvocationTargetException x)
+      {
+        /* Rethrow if possible. */
+	Throwable exception = x.getTargetException();
+	if (exception instanceof RuntimeException)
+	  throw (RuntimeException) exception;
+	if (exception instanceof IOException)
+	  throw (IOException) exception;
+
+	throw new IOException ("Exception thrown from readObject() on " +
+			       klass + ": " + exception.getClass().getName());
+      }
+    catch (Exception x)
       {
-	throw new IOException ();
+	throw new IOException ("Failure invoking readObject() on " +
+			       klass + ": " + x.getClass().getName());
       }
   }
     
diff --git a/libjava/java/io/ObjectOutputStream.java b/libjava/java/io/ObjectOutputStream.java
index cd6202ef877..faf7ea1a21b 100644
--- a/libjava/java/io/ObjectOutputStream.java
+++ b/libjava/java/io/ObjectOutputStream.java
@@ -633,7 +633,7 @@ public class ObjectOutputStream extends OutputStream
   /**
      @see java.io.DataOutputStream#write (byte[])
   */
-  public void write (byte b[]) throws IOException
+  public void write (byte[] b) throws IOException
   {
     write (b, 0, b.length);
   }
@@ -642,7 +642,7 @@ public class ObjectOutputStream extends OutputStream
   /**
      @see java.io.DataOutputStream#write (byte[],int,int)
   */
-  public void write (byte b[], int off, int len) throws IOException
+  public void write (byte[] b, int off, int len) throws IOException
   {
     if (writeDataAsBlocks)
     {
@@ -1175,22 +1175,35 @@ public class ObjectOutputStream extends OutputStream
 
   private void callWriteMethod (Object obj) throws IOException
   {
+    Class klass = obj.getClass ();
     try
       {
-	Class classArgs[] = {Class.forName ("java.io.ObjectOutputStream")};
-	Class klass = obj.getClass ();
+	Class classArgs[] = {ObjectOutputStream.class};
 	Method m = getMethod (klass, "writeObject", classArgs);
 	if (m == null)
 	  return;
 	Object args[] = {this};
 	m.invoke (obj, args);	
       }
-    catch (Exception _)
+    catch (InvocationTargetException x)
       {
-	throw new IOException ();
+        /* Rethrow if possible. */
+	Throwable exception = x.getTargetException();
+	if (exception instanceof RuntimeException)
+	  throw (RuntimeException) exception;
+	if (exception instanceof IOException)
+	  throw (IOException) exception;
+
+	throw new IOException ("Exception thrown from writeObject() on " +
+			       klass + ": " + exception.getClass().getName());
+      }
+    catch (Exception x)
+      {
+	throw new IOException ("Failure invoking writeObject() on " +
+			       klass + ": " + x.getClass().getName());
       }
   }
-    
+
   private boolean getBooleanField (Object obj, String field_name) throws IOException
   {
     try
@@ -1331,7 +1344,7 @@ public class ObjectOutputStream extends OutputStream
   private static native Field getField (Class klass, String name)
     throws java.lang.NoSuchFieldException;
 
-  private static native Method getMethod (Class klass, String name, Class args[])
+  private static native Method getMethod (Class klass, String name, Class[] args)
     throws java.lang.NoSuchMethodException;
 
   // this value comes from 1.2 spec, but is used in 1.1 as well