bodewig 2005/03/21 02:12:04 Modified: . Tag: ANT_16_BRANCH WHATSNEW src/main/org/apache/tools/tar Tag: ANT_16_BRANCH TarInputStream.java Log: merge Revision Changes Path No revision No revision 1.503.2.204 +3 -0 ant/WHATSNEW Index: WHATSNEW =================================================================== RCS file: /home/cvs/ant/WHATSNEW,v retrieving revision 1.503.2.203 retrieving revision 1.503.2.204 diff -u -r1.503.2.203 -r1.503.2.204 --- WHATSNEW 17 Mar 2005 10:18:43 -0000 1.503.2.203 +++ WHATSNEW 21 Mar 2005 10:12:03 -0000 1.503.2.204 @@ -270,6 +270,9 @@ * Improved handling of paths on cygwin Bugzilla Report 31245 +* TarInputStream#read() wasn't implemented correctly. Bugzilla Report + 34097. + Changes from Ant 1.6.1 to Ant 1.6.2 =================================== No revision No revision 1.12.2.5 +35 -23 ant/src/main/org/apache/tools/tar/TarInputStream.java Index: TarInputStream.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/tar/TarInputStream.java,v retrieving revision 1.12.2.4 retrieving revision 1.12.2.5 diff -u -r1.12.2.4 -r1.12.2.5 --- TarInputStream.java 9 Mar 2004 17:02:00 -0000 1.12.2.4 +++ TarInputStream.java 21 Mar 2005 10:12:04 -0000 1.12.2.5 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2004 The Apache Software Foundation + * Copyright 2000-2005 The Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -40,20 +40,41 @@ protected boolean hasHitEOF; protected int entrySize; protected int entryOffset; - protected byte[] oneBuf; protected byte[] readBuf; protected TarBuffer buffer; protected TarEntry currEntry; private boolean v7Format; + /** + * This contents of this array is not used at all in this class, + * it is only here to avoid repreated object creation during calls + * to the no-arg read method. + */ + protected byte[] oneBuf; + + /** + * Constructor for TarInputStream. + * @param is the input stream to use + */ public TarInputStream(InputStream is) { this(is, TarBuffer.DEFAULT_BLKSIZE, TarBuffer.DEFAULT_RCDSIZE); } + /** + * Constructor for TarInputStream. + * @param is the input stream to use + * @param blockSize the block size to use + */ public TarInputStream(InputStream is, int blockSize) { this(is, blockSize, TarBuffer.DEFAULT_RCDSIZE); } + /** + * Constructor for TarInputStream. + * @param is the input stream to use + * @param blockSize the block size to use + * @param recordSize the record size to use + */ public TarInputStream(InputStream is, int blockSize, int recordSize) { super(is); @@ -77,6 +98,7 @@ /** * Closes this stream. Calls the TarBuffer's close() method. + * @throws IOException on error */ public void close() throws IOException { this.buffer.close(); @@ -100,6 +122,7 @@ * * * @return The number of available bytes for the current entry. + * @throws IOException for signature */ public int available() throws IOException { return this.entrySize - this.entryOffset; @@ -112,6 +135,8 @@ * to skip extends beyond that point. * * @param numToSkip The number of bytes to skip. + * @return the number actually skipped + * @throws IOException on error */ public long skip(long numToSkip) throws IOException { // REVIEW @@ -165,6 +190,7 @@ * been reached. * * @return The next TarEntry in the archive, or null. + * @throws IOException on error */ public TarEntry getNextEntry() throws IOException { if (this.hasHitEOF) { @@ -230,10 +256,10 @@ if (this.currEntry != null && this.currEntry.isGNULongNameEntry()) { // read in the name StringBuffer longName = new StringBuffer(); - byte[] buffer = new byte[256]; + byte[] buf = new byte[256]; int length = 0; - while ((length = read(buffer)) >= 0) { - longName.append(new String(buffer, 0, length)); + while ((length = read(buf)) >= 0) { + longName.append(new String(buf, 0, length)); } getNextEntry(); @@ -254,27 +280,11 @@ * This method simply calls read( byte[], int, int ). * * @return The byte read, or -1 at EOF. + * @throws IOException on error */ public int read() throws IOException { int num = this.read(this.oneBuf, 0, 1); - - if (num == -1) { - return num; - } else { - return (int) this.oneBuf[0]; - } - } - - /** - * Reads bytes from the current tar archive entry. - * - * This method simply calls read( byte[], int, int ). - * - * @param buf The buffer into which to place bytes read. - * @return The number of bytes read, or -1 at EOF. - */ - public int read(byte[] buf) throws IOException { - return this.read(buf, 0, buf.length); + return num == -1 ? -1 : ((int) this.oneBuf[0]) & 0xFF; } /** @@ -288,6 +298,7 @@ * @param offset The offset at which to place bytes read. * @param numToRead The number of bytes to read. * @return The number of bytes read, or -1 at EOF. + * @throws IOException on error */ public int read(byte[] buf, int offset, int numToRead) throws IOException { int totalRead = 0; @@ -361,6 +372,7 @@ * an output stream. * * @param out The OutputStream into which to write the entry's data. + * @throws IOException on error */ public void copyEntryContents(OutputStream out) throws IOException { byte[] buf = new byte[32 * 1024];
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]