natPlainSocketImplPosix.cc (read_helper): Handle count == 0 case.

2005-03-15  David Daney  <ddaney@avtrex.com>

	* gnu/java/net/natPlainSocketImplPosix.cc (read_helper): Handle
	count == 0 case.

2005-03-15  David Daney  <ddaney@avtrex.com>

	* java/io/BufferedInputStream.java (available): Use 'in' instead
	of 'super' for underlying stream access.
	(close): Ditto.
	(read(byte[], int, int)): Ditto.
	(refill): Ditto.
	(skip): Call skip on underlying stream when possible.

From-SVN: r96516
This commit is contained in:
David Daney 2005-03-15 16:46:51 +00:00 committed by David Daney
parent 4f51c6e7ca
commit 6dcd18b9aa
3 changed files with 36 additions and 7 deletions

View File

@ -1,3 +1,17 @@
2005-03-15 David Daney <ddaney@avtrex.com>
* gnu/java/net/natPlainSocketImplPosix.cc (read_helper): Handle
count == 0 case.
2005-03-15 David Daney <ddaney@avtrex.com>
* java/io/BufferedInputStream.java (available): Use 'in' instead
of 'super' for underlying stream access.
(close): Ditto.
(read(byte[], int, int)): Ditto.
(refill): Ditto.
(skip): Call skip on underlying stream when possible.
2005-03-12 Andreas Tobler <a.tobler@schweiz.ch>
* stacktrace.cc (GetCallerInfo): Return nothing in case of

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2003, 2004 Free Software Foundation
/* Copyright (C) 2003, 2004, 2005 Free Software Foundation
This file is part of libgcj.
@ -405,6 +405,11 @@ gnu::java::net::PlainSocketImpl$SocketInputStream::read(jbyteArray buffer, jint
static jint
read_helper (jint native_fd, jint timeout, jbyte *bytes, jint count)
{
// If zero bytes were requested, short circuit so that recv
// doesn't signal EOF.
if (count == 0)
return 0;
// Do timeouts via select.
if (timeout > 0 && native_fd >= 0 && native_fd < FD_SETSIZE)
{

View File

@ -158,7 +158,7 @@ public class BufferedInputStream extends FilterInputStream
*/
public synchronized int available() throws IOException
{
return count - pos + super.available();
return count - pos + in.available();
}
/**
@ -173,7 +173,7 @@ public class BufferedInputStream extends FilterInputStream
buf = null;
pos = count = 0;
markpos = -1;
super.close();
in.close();
}
/**
@ -273,7 +273,7 @@ public class BufferedInputStream extends FilterInputStream
off += totalBytesRead;
len -= totalBytesRead;
while (len > 0 && super.available() > 0 && refill())
while (len > 0 && in.available() > 0 && refill())
{
int remain = Math.min(count - pos, len);
System.arraycopy(buf, pos, b, off, remain);
@ -327,8 +327,18 @@ public class BufferedInputStream extends FilterInputStream
while (n > 0L)
{
if (pos >= count && !refill())
break;
if (pos >= count)
{
if (markpos == -1)
{
// Buffer is empty and no mark is set, skip on the
// underlying stream.
n -= in.skip(n);
break;
}
else if (!refill())
break;
}
int numread = (int) Math.min((long) (count - pos), n);
pos += numread;
@ -369,7 +379,7 @@ public class BufferedInputStream extends FilterInputStream
markpos = 0;
}
int numread = super.read(buf, count, bufferSize);
int numread = in.read(buf, count, bufferSize);
if (numread <= 0) // EOF
return false;