rhoegg      2003/02/01 14:29:37

  Modified:    .        Tag: XMLRPC_1_2_BRANCH build.xml
               src/java/org/apache/xmlrpc Tag: XMLRPC_1_2_BRANCH
                        Base64.java
               src/test/org/apache/xmlrpc Tag: XMLRPC_1_2_BRANCH
                        Base64Test.java
  Log:
  Brought Base64 up to date with HEAD.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.20.2.1  +1 -1      xml-rpc/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/xml-rpc/build.xml,v
  retrieving revision 1.20
  retrieving revision 1.20.2.1
  diff -u -r1.20 -r1.20.2.1
  --- build.xml 10 Oct 2002 00:33:24 -0000      1.20
  +++ build.xml 1 Feb 2003 22:29:37 -0000       1.20.2.1
  @@ -3,7 +3,7 @@
   <project name="xmlrpc" default="jar" basedir=".">
   
     <!-- Properties which are not allowed to be overridden -->
  -  <property name="version" value="1.2-a3-dev"/>
  +  <property name="version" value="1.2-b1-dev"/>
   
     <!-- Allow any user specific values to override the defaults -->
     <property file="${user.home}/build.properties" />
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.4.2.1   +32 -8     xml-rpc/src/java/org/apache/xmlrpc/Base64.java
  
  Index: Base64.java
  ===================================================================
  RCS file: /home/cvs/xml-rpc/src/java/org/apache/xmlrpc/Base64.java,v
  retrieving revision 1.4
  retrieving revision 1.4.2.1
  diff -u -r1.4 -r1.4.2.1
  --- Base64.java       1 Nov 2002 22:06:10 -0000       1.4
  +++ Base64.java       1 Feb 2003 22:29:37 -0000       1.4.2.1
  @@ -79,6 +79,9 @@
    */
   public final class  Base64
   {
  +    static final int CHUNK_SIZE = 76;
  +    static final byte[] CHUNK_SEPARATOR = "\n".getBytes();
  +
       static private final int  BASELENGTH         = 255;
       static private final int  LOOKUPLENGTH       = 64;
       static private final int  TWENTYFOURBITGROUP = 24;
  @@ -167,24 +170,34 @@
           int      fewerThan24bits   = lengthDataBits%TWENTYFOURBITGROUP;
           int      numberTriplets    = lengthDataBits/TWENTYFOURBITGROUP;
           byte     encodedData[]     = null;
  -
  +     int      encodedDataLength = 0;
   
           if (fewerThan24bits != 0)
           {
               //data not divisible by 24 bit
  -            encodedData = new byte[ (numberTriplets + 1 ) * 4 ];
  +            encodedDataLength = (numberTriplets + 1 ) * 4;
           }
           else
           {
               // 16 or 8 bit
  -            encodedData = new byte[ numberTriplets * 4 ];
  +            encodedDataLength = numberTriplets * 4;
           }
   
  +     // allow extra length for the separator
  +        int nbrChunks = (CHUNK_SEPARATOR.length == 0 ? 0 :
  +                         (int) Math.ceil((float) encodedDataLength / CHUNK_SIZE));
  +
  +     encodedDataLength += (nbrChunks - 1) * CHUNK_SEPARATOR.length;
  +     encodedData = new byte[encodedDataLength];
  +
           byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0;
   
           int encodedIndex = 0;
           int dataIndex   = 0;
           int i           = 0;
  +     int nextSeparatorIndex = CHUNK_SIZE;
  +     int chunksSoFar = 0;
  +
           //log.debug("number of triplets = " + numberTriplets);
           for ( i = 0; i<numberTriplets; i++ )
           {
  @@ -198,7 +211,6 @@
               l  = (byte)(b2 & 0x0f);
               k  = (byte)(b1 & 0x03);
   
  -            encodedIndex = i * 4;
               byte val1 = ((b1 & SIGN)==0)?(byte)(b1>>2):(byte)((b1)>>2^0xc0);
               byte val2 = ((b2 & SIGN)==0)?(byte)(b2>>4):(byte)((b2)>>4^0xf0);
               byte val3 = ((b3 & SIGN)==0)?(byte)(b3>>6):(byte)((b3)>>6^0xfc);
  @@ -212,11 +224,23 @@
               encodedData[encodedIndex+2] =
                   lookUpBase64Alphabet[ (l <<2 ) | val3 ];
               encodedData[encodedIndex+3] = lookUpBase64Alphabet[ b3 & 0x3f ];
  +
  +         encodedIndex += 4;
  +
  +         // this assumes that CHUNK_SIZE % 4 == 0
  +         if(encodedIndex == nextSeparatorIndex){
  +             System.arraycopy(CHUNK_SEPARATOR, 0, encodedData,
  +                                 encodedIndex, CHUNK_SEPARATOR.length);
  +             chunksSoFar++;
  +             nextSeparatorIndex = (CHUNK_SIZE * (chunksSoFar + 1)) + 
  +                                     (chunksSoFar * CHUNK_SEPARATOR.length);
  +             encodedIndex += CHUNK_SEPARATOR.length;
  +         }
           }
   
           // form integral number of 6-bit groups
           dataIndex    = i*3;
  -        encodedIndex = i*4;
  +
           if (fewerThan24bits == EIGHTBIT )
           {
               b1 = binaryData[dataIndex];
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.7.2.1   +7 -4      xml-rpc/src/test/org/apache/xmlrpc/Base64Test.java
  
  Index: Base64Test.java
  ===================================================================
  RCS file: /home/cvs/xml-rpc/src/test/org/apache/xmlrpc/Base64Test.java,v
  retrieving revision 1.7
  retrieving revision 1.7.2.1
  diff -u -r1.7 -r1.7.2.1
  --- Base64Test.java   1 Nov 2002 22:06:10 -0000       1.7
  +++ Base64Test.java   1 Feb 2003 22:29:37 -0000       1.7.2.1
  @@ -131,9 +131,8 @@
                   assertEquals(TEST_DATA[i], new String(decoded));
               }
   
  -            // FIXME: The Base64.encode() function doesn't wrap at 76 chars.
  -            //assertEquals(Base64.encode(UNENCODED.getBytes()),
  -            //             ENCODED.getBytes());
  +            assertEquals(Base64.encode(UNENCODED.getBytes()),
  +                         ENCODED.getBytes());
               assertEquals(UNENCODED.getBytes(),
                            Base64.decode(ENCODED.getBytes()));
           }
  @@ -149,11 +148,15 @@
        */
       private void assertEquals(byte[] a, byte[] b)
       {
  +        if (a.length != b.length)
  +        {
  +            fail("Byte arrays have different lengths (" + a.length + " != " + 
b.length + ")");
  +        }
           for (int i = 0; i < a.length; i++)
           {
               if (a[i] != b[i])
               {
  -                fail("Byte arrays not equal (" + a[i] + " != " + b[i] + ")");
  +                fail("Byte arrays not equal (" + a[i] + " != " + b[i] + " at 
position + " + i + ")");
               }
           }
       }
  
  
  


Reply via email to