mbenson 2005/03/04 14:29:32 Modified: src/main/org/apache/tools/ant/filters FixCrLfFilter.java Log: 1. Remove unused private inner class. 2. Fix loop introduced by a seemingly innocent logic change :( 3. Fix bug that caused extra EOFs when input already contained EOF. 4. Make instances constructed with a Reader usable. Revision Changes Path 1.3 +27 -37 ant/src/main/org/apache/tools/ant/filters/FixCrLfFilter.java Index: FixCrLfFilter.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/filters/FixCrLfFilter.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- FixCrLfFilter.java 4 Mar 2005 16:45:37 -0000 1.2 +++ FixCrLfFilter.java 4 Mar 2005 22:29:32 -0000 1.3 @@ -79,6 +79,7 @@ private AddAsisRemove tabs; private boolean javafiles = false; private boolean fixlast = true; + private boolean initialized = false; /** * Constructor for "dummy" instances. @@ -263,6 +264,7 @@ } // Add missing EOF character in = (ctrlz == AddAsisRemove.ADD) ? new AddEofFilter(in) : in; + initialized = true; } /** @@ -274,7 +276,10 @@ * @exception IOException if the underlying stream throws an IOException * during reading. */ - public final int read() throws IOException { + public synchronized final int read() throws IOException { + if (!initialized) { + initInternalFilters(); + } return in.read(); } @@ -552,16 +557,24 @@ if (normalizedEOL == 0) { int numEOL = 0; - + boolean atEnd = false; switch (thisChar) { case CTRLZ: + int c = super.read(); + if (c == -1) { + atEnd = true; + if (fixLast && !previousWasEOL) { + numEOL = 1; + push(thisChar); + } + } else { + push(c); + } + break; case -1: + atEnd = true; if (fixLast && !previousWasEOL) { numEOL = 1; - - if (thisChar == CTRLZ) { - push(thisChar); - } } break; case '\n': @@ -595,7 +608,7 @@ } previousWasEOL = true; thisChar = read(); - } else if (thisChar != -1) { + } else if (!atEnd) { previousWasEOL = false; } } else { @@ -605,33 +618,6 @@ } } - private static class FixLastFilter extends SimpleFilterReader { - int lastChar = -1; - char[] eol = null; - - public FixLastFilter(Reader in, String eolString) { - super(in); - eol = eolString.toCharArray(); - } - - public int read() throws IOException { - int thisChar = super.read(); - // if source is EOF but last character was NOT eol, return eol - if (thisChar == -1) { - switch (lastChar) { - case '\r': - case '\n': - // Return first character of EOL - thisChar = eol[0]; - // Push remaining characters onto input stream - push(eol, 1, eol.length - 1); - } - } - lastChar = thisChar; - return thisChar; - } - } - private static class AddEofFilter extends SimpleFilterReader { int lastChar = -1; @@ -643,10 +629,14 @@ int thisChar = super.read(); // if source is EOF but last character was NOT ctrl-z, return ctrl-z - if (thisChar == -1 && lastChar != CTRLZ) { - thisChar = CTRLZ; + if (thisChar == -1) { + if (lastChar != CTRLZ) { + lastChar = CTRLZ; + return lastChar; + } + } else { + lastChar = thisChar; } - lastChar = thisChar; return thisChar; } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]