Author: markt Date: Tue Mar 25 15:13:49 2008 New Revision: 641043 URL: http://svn.apache.org/viewvc?rev=641043&view=rev Log: Revert original proposal for BZ44494 since an alternative patch was committed to 6.0.x
Modified: tomcat/trunk/java/org/apache/catalina/connector/InputBuffer.java tomcat/trunk/java/org/apache/tomcat/util/buf/B2CConverter.java Modified: tomcat/trunk/java/org/apache/catalina/connector/InputBuffer.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/InputBuffer.java?rev=641043&r1=641042&r2=641043&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/connector/InputBuffer.java (original) +++ tomcat/trunk/java/org/apache/catalina/connector/InputBuffer.java Tue Mar 25 15:13:49 2008 @@ -354,9 +354,9 @@ cb.setEnd(0); } - conv.convert(bb, cb); - bb.setOffset(bb.getEnd()); state = CHAR_STATE; + conv.convert(bb, cb, len); + bb.setOffset(bb.getEnd()); return cb.getLength(); Modified: tomcat/trunk/java/org/apache/tomcat/util/buf/B2CConverter.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/buf/B2CConverter.java?rev=641043&r1=641042&r2=641043&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/buf/B2CConverter.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/buf/B2CConverter.java Tue Mar 25 15:13:49 2008 @@ -68,22 +68,31 @@ char result[]=new char[BUFFER_SIZE]; /** Convert a buffer of bytes into a chars + * @deprecated */ public void convert( ByteChunk bb, CharChunk cb ) throws IOException { // Set the ByteChunk as input to the Intermediate reader - iis.setByteChunk( bb ); - convert(cb); + convert(bb, cb, cb.getBuffer().length - cb.getEnd()); } - private void convert(CharChunk cb) + public void convert( ByteChunk bb, CharChunk cb, int limit) + throws IOException + { + iis.setByteChunk( bb ); + convert(cb, limit); + } + + private void convert(CharChunk cb, int limit) throws IOException { try { // read from the reader - while( iis.available()>0 ) { // conv.ready() ) { - int cnt=conv.read( result, 0, BUFFER_SIZE ); + int count = 0; + while( limit > 0 ) { // conv.ready() ) { + int size = limit < BUFFER_SIZE ? limit : BUFFER_SIZE; + int cnt=conv.read( result, 0, size ); if( cnt <= 0 ) { // End of stream ! - we may be in a bad state if( debug>0) @@ -96,6 +105,7 @@ // XXX go directly cb.append( result, 0, cnt ); + limit -= cnt; } } catch( IOException ex) { if( debug>0) @@ -211,10 +221,6 @@ return super.read( cbuf, off, len ); } - public final int read() throws IOException { - return super.read(); - } - /** Reset the buffer */ public final void recycle() { @@ -229,10 +235,7 @@ not be called if recycling the converter and if data was not flushed. */ final class IntermediateInputStream extends InputStream { - byte buf[]; - int pos; - int len; - int end; + ByteChunk bc = null; public IntermediateInputStream() { } @@ -243,64 +246,18 @@ } public final int read(byte cbuf[], int off, int len) throws IOException { - if( pos >= end ) return -1; - if (pos + len > end) { - len = end - pos; - } - if (len <= 0) { - return 0; - } - System.arraycopy(buf, pos, cbuf, off, len); - pos += len; - return len; + return bc.substract(cbuf, off, len); } public final int read() throws IOException { - return (pos < end ) ? (buf[pos++] & 0xff) : -1; + return bc.substract(); } - + // -------------------- Internal methods -------------------- - void setBuffer( byte b[], int p, int l ) { - buf=b; - pos=p; - len=l; - end=pos+len; - } void setByteChunk( ByteChunk mb ) { - buf=mb.getBytes(); - pos=mb.getStart(); - len=mb.getLength(); - end=pos+len; - } - - public int available() throws IOException { - return end-pos; - } - - public boolean markSupported() { - return false; - } - - public int read(byte[] b) throws IOException { - return read(b,0,b.length); - } - - /** - * Repositions this stream to the position at the time the <code>mark</code> method was last called on this input - * stream. - * - * @throws IOException if this stream has not been marked or if the mark has been invalidated. - * @todo Implement this java.io.InputStream method - */ - public synchronized void reset() throws IOException { - //not implemented - } - - public long skip(long n) throws IOException { - //not implemented - return 0L; + bc = mb; } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]