mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-21 05:49:21 +08:00
PipedInputStream.java (read(byte[],int,int)): Mostly rewrote.
* java/io/PipedInputStream.java (read(byte[],int,int)): Mostly rewrote. (receive): Streamlined. From-SVN: r35556
This commit is contained in:
parent
320f95489d
commit
8ac80386ca
@ -1,3 +1,9 @@
|
||||
2000-08-07 Tom Tromey <tromey@cygnus.com>
|
||||
|
||||
* java/io/PipedInputStream.java (read(byte[],int,int)): Mostly
|
||||
rewrote.
|
||||
(receive): Streamlined.
|
||||
|
||||
2000-08-05 Tom Tromey <tromey@cygnus.com>
|
||||
|
||||
* java/io/PrintWriter.java: Merged comments from Classpath.
|
||||
|
@ -285,61 +285,40 @@ read(byte[] buf, int offset, int len) throws IOException
|
||||
int bytes_read = 0;
|
||||
for (;;)
|
||||
{
|
||||
// If there are bytes, take them
|
||||
// If there are bytes, take them.
|
||||
if (in != -1)
|
||||
{
|
||||
int desired_bytes = len - bytes_read;
|
||||
|
||||
// We are in a "wrap" condition
|
||||
if (out > in)
|
||||
// We are in a "wrap" condition.
|
||||
if (out >= in)
|
||||
{
|
||||
if (desired_bytes > (pipe_size - out))
|
||||
{
|
||||
if (in == 0)
|
||||
desired_bytes = (pipe_size - out) - 1;
|
||||
else
|
||||
desired_bytes = pipe_size - out;
|
||||
desired_bytes = Math.min (desired_bytes, pipe_size - out);
|
||||
|
||||
System.arraycopy(buffer, out, buf, offset + bytes_read,
|
||||
desired_bytes);
|
||||
System.arraycopy (buffer, out, buf, offset + bytes_read,
|
||||
desired_bytes);
|
||||
|
||||
bytes_read += desired_bytes;
|
||||
out += desired_bytes;
|
||||
desired_bytes = len - bytes_read;
|
||||
bytes_read += desired_bytes;
|
||||
out += desired_bytes;
|
||||
desired_bytes = len - bytes_read;
|
||||
|
||||
if (out == pipe_size)
|
||||
out = 0;
|
||||
if (out == pipe_size)
|
||||
{
|
||||
out = 0;
|
||||
// OUT has wrapped. Make sure that we don't falsely
|
||||
// indicate that the buffer is full.
|
||||
if (in == 0)
|
||||
in = -1;
|
||||
}
|
||||
|
||||
notifyAll();
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((out + desired_bytes) == in)
|
||||
--desired_bytes;
|
||||
|
||||
if (((out + desired_bytes) == pipe_size) && (in == 0))
|
||||
desired_bytes = (pipe_size - out) - 1;
|
||||
|
||||
System.arraycopy(buffer, out, buf, offset + bytes_read,
|
||||
desired_bytes);
|
||||
|
||||
bytes_read += desired_bytes;
|
||||
out += desired_bytes;
|
||||
desired_bytes = len - bytes_read;
|
||||
|
||||
if (out == pipe_size)
|
||||
out = 0;
|
||||
|
||||
notifyAll();
|
||||
}
|
||||
notifyAll();
|
||||
}
|
||||
|
||||
// We are in a "no wrap" or condition (can also be fall through
|
||||
// from above
|
||||
|
||||
// We are in a "no wrap". This can be triggered by
|
||||
// fall-through from the above.
|
||||
if (in > out)
|
||||
{
|
||||
if (desired_bytes >= ((in - out) - 1))
|
||||
desired_bytes = (in - out) - 1;
|
||||
desired_bytes = Math.min (desired_bytes, in - out);
|
||||
|
||||
System.arraycopy(buffer, out, buf, offset + bytes_read,
|
||||
desired_bytes);
|
||||
@ -348,41 +327,42 @@ read(byte[] buf, int offset, int len) throws IOException
|
||||
out += desired_bytes;
|
||||
desired_bytes = len - bytes_read;
|
||||
|
||||
if (out == pipe_size)
|
||||
if (out == in)
|
||||
{
|
||||
// Don't falsely indicate that the buffer is full.
|
||||
out = 0;
|
||||
in = -1;
|
||||
}
|
||||
else if (out == pipe_size)
|
||||
out = 0;
|
||||
|
||||
notifyAll();
|
||||
}
|
||||
}
|
||||
|
||||
// If we are done, return
|
||||
if (bytes_read == len)
|
||||
return(bytes_read);
|
||||
|
||||
// Return a short count if necessary
|
||||
if (bytes_read > 0 && bytes_read < len)
|
||||
// Return when we've read something. A short return is ok.
|
||||
// Also return in the case where LEN==0.
|
||||
if (bytes_read > 0 || bytes_read == len)
|
||||
return(bytes_read);
|
||||
|
||||
// Handle the case where the end of stream was encountered.
|
||||
if (closed)
|
||||
{
|
||||
// We never let in == out so there might be one last byte
|
||||
// available that we have not copied yet.
|
||||
if (in != -1)
|
||||
{
|
||||
buf[offset + bytes_read] = buffer[out];
|
||||
in = -1;
|
||||
++out;
|
||||
++bytes_read;
|
||||
}
|
||||
if (in == -1)
|
||||
{
|
||||
// The stream is closed and empty. We've already
|
||||
// returned if bytes were read. So we know EOF is the
|
||||
// only answer.
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (bytes_read != 0)
|
||||
return(bytes_read);
|
||||
else
|
||||
return(-1);
|
||||
// I think this shouldn't happen. I don't think there is a
|
||||
// way to get here when nothing has been read but there are
|
||||
// bytes in the buffer. Still...
|
||||
continue;
|
||||
}
|
||||
|
||||
// Wait for a byte to be read
|
||||
// Wait for a byte to be received.
|
||||
try
|
||||
{
|
||||
wait();
|
||||
@ -434,33 +414,39 @@ receive(byte[] buf, int offset, int len) throws IOException
|
||||
return;
|
||||
|
||||
int total_written = 0;
|
||||
outer:
|
||||
while (total_written < len)
|
||||
{
|
||||
// If we are not at the end of the buffer with out = 0
|
||||
if (!((in == (buffer.length - 1)) && (out == 0)))
|
||||
// If the buffer is full, then wait.
|
||||
// Also, if we are at the end of the buffer and OUT is 0, wait.
|
||||
if (! (in == out
|
||||
|| (in == pipe_size - 1 && out == 0)))
|
||||
{
|
||||
// This is the "no wrap" situation
|
||||
if ((in - 1) >= out)
|
||||
if (in > out)
|
||||
{
|
||||
int bytes_written = 0;
|
||||
if ((buffer.length - in) > (len - total_written))
|
||||
if ((pipe_size - in) > (len - total_written))
|
||||
bytes_written = (len - total_written);
|
||||
else if (out == 0)
|
||||
bytes_written = (buffer.length - in) - 1;
|
||||
bytes_written = (pipe_size - in) - 1;
|
||||
else
|
||||
bytes_written = (buffer.length - in);
|
||||
bytes_written = (pipe_size - in);
|
||||
|
||||
if (bytes_written > 0)
|
||||
System.arraycopy(buf, offset + total_written, buffer, in,
|
||||
bytes_written);
|
||||
total_written += bytes_written;
|
||||
in += bytes_written;
|
||||
{
|
||||
System.arraycopy(buf, offset + total_written, buffer, in,
|
||||
bytes_written);
|
||||
total_written += bytes_written;
|
||||
in += bytes_written;
|
||||
|
||||
if (in == buffer.length)
|
||||
in = 0;
|
||||
if (in == pipe_size)
|
||||
in = 0;
|
||||
|
||||
notifyAll();
|
||||
notifyAll();
|
||||
}
|
||||
}
|
||||
|
||||
// This is the "wrap" situtation
|
||||
if ((out > in) && (total_written != len))
|
||||
{
|
||||
@ -470,40 +456,20 @@ receive(byte[] buf, int offset, int len) throws IOException
|
||||
if (in == -1)
|
||||
{
|
||||
in = 0;
|
||||
|
||||
if (buffer.length > len)
|
||||
bytes_written = len;
|
||||
else
|
||||
bytes_written = buffer.length - 1;
|
||||
}
|
||||
else if (((out - in) - 1) < (len - total_written))
|
||||
{
|
||||
bytes_written = (out - in) - 1;
|
||||
bytes_written = Math.min (len - total_written, pipe_size);
|
||||
}
|
||||
else
|
||||
{
|
||||
bytes_written = len - total_written;
|
||||
}
|
||||
|
||||
// If the buffer is full, wait for it to empty out
|
||||
if ((out - 1) == in)
|
||||
{
|
||||
try
|
||||
{
|
||||
wait();
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
{
|
||||
bytes_written = Math.min (len - total_written,
|
||||
out - in);
|
||||
}
|
||||
|
||||
System.arraycopy(buf, offset + total_written, buffer, in,
|
||||
bytes_written);
|
||||
total_written += bytes_written;
|
||||
in += bytes_written;
|
||||
|
||||
if (in == buffer.length)
|
||||
if (in == pipe_size)
|
||||
in = 0;
|
||||
|
||||
notifyAll();
|
||||
@ -522,4 +488,3 @@ receive(byte[] buf, int offset, int len) throws IOException
|
||||
}
|
||||
|
||||
} // class PipedInputStream
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1998, 1999 Free Software Foundation
|
||||
/* Copyright (C) 1998, 1999, 2000 Free Software Foundation
|
||||
|
||||
This file is part of libgcj.
|
||||
|
||||
@ -253,10 +253,13 @@ public final class Field extends AccessibleObject implements Member
|
||||
StringBuffer sbuf = new StringBuffer ();
|
||||
int mods = getModifiers();
|
||||
if (mods != 0)
|
||||
Modifier.toString(mods, sbuf);
|
||||
{
|
||||
Modifier.toString(mods, sbuf);
|
||||
sbuf.append(' ');
|
||||
}
|
||||
sbuf.append(getType());
|
||||
sbuf.append(' ');
|
||||
sbuf.append(getDeclaringClass());
|
||||
sbuf.append(getDeclaringClass().getName());
|
||||
sbuf.append('.');
|
||||
sbuf.append(getName());
|
||||
return sbuf.toString();
|
||||
|
@ -78,17 +78,17 @@ public final class Method extends AccessibleObject implements Member
|
||||
getType ();
|
||||
|
||||
StringBuffer b = new StringBuffer ();
|
||||
b.append(Modifier.toString(getModifiers()));
|
||||
Modifier.toString(getModifiers(), b);
|
||||
b.append(" ");
|
||||
b.append(return_type.toString());
|
||||
b.append(" ");
|
||||
b.append(declaringClass.toString());
|
||||
b.append(declaringClass.getName());
|
||||
b.append(".");
|
||||
b.append(name);
|
||||
b.append("(");
|
||||
for (int i = 0; i < parameter_types.length; ++i)
|
||||
{
|
||||
b.append(parameter_types[i].toString());
|
||||
b.append(parameter_types[i].getName());
|
||||
if (i < parameter_types.length - 1)
|
||||
b.append(",");
|
||||
}
|
||||
@ -98,7 +98,7 @@ public final class Method extends AccessibleObject implements Member
|
||||
b.append(" throws ");
|
||||
for (int i = 0; i < exception_types.length; ++i)
|
||||
{
|
||||
b.append(exception_types[i].toString());
|
||||
b.append(exception_types[i].getName());
|
||||
if (i < exception_types.length - 1)
|
||||
b.append(",");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user