You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bi...@apache.org on 2007/09/04 04:44:08 UTC

svn commit: r572497 - /tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/buf/B2CConverter.java

Author: billbarker
Date: Mon Sep  3 19:44:07 2007
New Revision: 572497

URL: http://svn.apache.org/viewvc?rev=572497&view=rev
Log:
Forward porting Reader fixes from 5.5.x

Modified:
    tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/buf/B2CConverter.java

Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/buf/B2CConverter.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/buf/B2CConverter.java?rev=572497&r1=572496&r2=572497&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/buf/B2CConverter.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/buf/B2CConverter.java Mon Sep  3 19:44:07 2007
@@ -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( true ) { // 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)
@@ -225,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() {
     }
@@ -239,36 +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;
+        bc = mb;
     }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org