+1999-07-01 Warren Levy <warrenl@cygnus.com>
+
+ * gnu/gcj/convert/BytesToUnicode.java (read): Changed outlength
+ to count and revised comments to match.
+ * gnu/gcj/convert/Input_EUCJIS.java (read): Same as Input_8859_1.java.
+ * gnu/gcj/convert/Input_JavaSrc.java (read): ditto.
+ * gnu/gcj/convert/Input_SJIS.java (read): ditto.
+ * gnu/gcj/convert/Input_UTF8.java (read): ditto.
+ * gnu/gcj/convert/natInput_EUCJIS.cc (read): ditto.
+ * gnu/gcj/convert/natInput_SJIS.cc (read): ditto.
+
+1999-07-01 John-Marc Chandonia <jmc@cmpharm.ucsf.edu>
+
+ * gnu/gcj/convert/Input_8859_1.java (read): Use 3rd parameter
+ properly as count rather than outlength.
+ * java/io/BufferedOutputStream.java (write(byte[],int,int): Flush
+ output on overflow rather than buffer fill.
+ * java/io/BufferedReader.java (fill): Don't clear out the buffer
+ if markPos is 0 and there is still room in the buffer.
+
1999-07-01 Andrew Haley <aph@cygnus.com>
* include/i386-signal.h: Replace sigaction () with __sigaction ().
* bytes start at inbuffer[inpos], and end at inbuffer[inlength-1].
* @param outbuffer buffer for the converted character
* @param outpos position in buffer to start putting converted characters
- * @param outlength the maximum number of characters to convert
+ * @param count the maximum number of characters to convert
* @return number of chars placed in outbuffer.
* Also, this.inpos is incremented by the number of bytes consumed.
*
* (Note the asymmetry in that the input upper bound is inbuffer[inlength-1],
- * while the output upper bound is outbuffer[outpos+outlength-1]. The
+ * while the output upper bound is outbuffer[outpos+count-1]. The
* justification is that inlength is like the count field of a
- * BufferedInputStream, while the outlength parameter is like the
- * length parameter of a read request.)
+ * BufferedInputStream, while the count parameter is like the
+ * length parameter of a read request.) The count parameter is
+ * also defined to be <= outbuffer.length - outpos (per the specification
+ * of the length parameter for a read request).
*/
- public abstract int read (char[] outbuffer, int outpos, int outlength);
+ public abstract int read (char[] outbuffer, int outpos, int count);
}
/**
* Convert ISO-Latin-1 (8851-1) text to Unicode.
* @author Per Bothner <bothner@cygnus.com>
- * @date Match 1999.
+ * @date March 1999.
*/
public class Input_8859_1 extends BytesToUnicode
{
public String getName() { return "8859_1"; }
- public int read (char[] outbuffer, int outpos, int outlength)
+ public int read (char[] outbuffer, int outpos, int count)
{
int origpos = outpos;
// Make sure fields of this are in registers.
int inpos = this.inpos;
byte[] inbuffer = this.inbuffer;
int inavail = this.inlength - inpos;
- int outavail = outlength - outpos;
+ int outavail = count;
if (outavail > inavail)
outavail = inavail;
while (--outavail >= 0)
int codeset = 0;
int first_byte;
- public native int read (char[] outbuffer, int outpos, int outlength);
+ public native int read (char[] outbuffer, int outpos, int count);
}
int value;
- public int read (char[] outbuffer, int outpos, int outlength)
+ public int read (char[] outbuffer, int outpos, int count)
{
int origpos = outpos;
for (;;)
{
if (inpos >= inlength)
break;
- if (outpos >= outlength)
+ if (outpos - origpos >= count)
break;
char b = (char) (inbuffer[inpos++] & 0xFF);
switch (state)
{
public String getName() { return "SJIS"; }
- public native int read (char[] outbuffer, int outpos, int outlength);
+ public native int read (char[] outbuffer, int outpos, int count);
int first_byte;
}
/**
* Convert UTF8 to Unicode.
* @author Per Bothner <bothner@cygnus.com>
- * @date Match 1999.
+ * @date March 1999.
*/
public class Input_UTF8 extends BytesToUnicode
int partial_bytes_expected = 0;
//int suggogate_second = -1;
- public int read (char[] outbuffer, int outpos, int outlength)
+ public int read (char[] outbuffer, int outpos, int count)
{
int origpos = outpos;
for (;;)
{
- if (outpos >= outlength)
+ if (outpos - origpos >= count)
break;
if (inpos >= inlength)
break;
jint
gnu::gcj::convert::Input_EUCJIS::read(jcharArray outbuffer, jint outpos,
- jint outlength)
+ jint count)
{
jint start_outpos = outpos;
for (;;)
{
- if (outpos >= outlength)
+ if (outpos - start_outpos >= count)
break;
if (inpos >= inlength)
break;
jint
gnu::gcj::convert::Input_SJIS::read(jcharArray outbuffer, jint outpos,
- jint outlength)
+ jint count)
{
jint start_outpos = outpos;
for (;;)
{
- if (outpos >= outlength)
+ if (outpos - start_outpos >= count)
break;
if (inpos >= inlength)
break;
public synchronized void write (int b) throws IOException
{
+ // Flush output on overflow though JDK (1.2) doc may infer to flush on fill.
if (count < buf.length)
buf[count++] = (byte) b;
else
public synchronized void write (byte[] b, int off, int len)
throws IOException, NullPointerException, IndexOutOfBoundsException
{
+ // Flush output on overflow though JDK (1.2) doc may infer to flush on fill.
+
// If LEN < 0 then the downstream write will fail for us.
- if (len >= 0 && count + len < buf.length)
+ if (len >= 0 && count + len <= buf.length)
{
System.arraycopy(b, off, buf, count, len);
count += len;
}
}
- /* Read more data into the buffer. Update pos and limit appropriatly.
+ /* Read more data into the buffer. Update pos and limit appropriately.
Assumes pos==limit initially. May invalidate the mark if read too much.
Return number of chars read (never 0), or -1 on eof. */
private int fill() throws IOException
if (markPos >= 0 && limit == buffer.length)
markPos = -1;
- if (markPos <= 0)
+ if (markPos < 0)
pos = limit = 0;
int count = in.read(buffer, limit, buffer.length - limit);
if (count > 0)