diff --git a/src/main/org/apache/tools/ant/types/ZipScanner.java b/src/main/org/apache/tools/ant/types/ZipScanner.java index 774135eb2..79858127a 100644 --- a/src/main/org/apache/tools/ant/types/ZipScanner.java +++ b/src/main/org/apache/tools/ant/types/ZipScanner.java @@ -58,6 +58,8 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Vector; +import java.util.Hashtable; +import java.util.Enumeration; import java.util.zip.ZipInputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipException; @@ -93,7 +95,7 @@ public class ZipScanner extends DirectoryScanner { /** * record list of all zip entries */ - private Vector myentries; + private Hashtable myentries; /** * Sets the srcFile for scanning. This is the jar or zip file that @@ -128,8 +130,8 @@ public class ZipScanner extends DirectoryScanner { Vector myvector = new Vector(); // first check if the archive needs to be scanned again scanme(); - for (int counter = 0; counter < myentries.size(); counter++) { - Resource myresource= (Resource) myentries.elementAt(counter); + for (Enumeration e = myentries.elements() ; e.hasMoreElements() ;) { + Resource myresource= (Resource) e.nextElement(); if (!myresource.isDirectory() && match(myresource.getName())) { myvector.addElement(myresource.getName()); } @@ -151,8 +153,8 @@ public class ZipScanner extends DirectoryScanner { Vector myvector=new Vector(); // first check if the archive needs to be scanned again scanme(); - for (int counter = 0; counter < myentries.size(); counter++) { - Resource myresource = (Resource) myentries.elementAt(counter); + for (Enumeration e = myentries.elements() ; e.hasMoreElements() ;) { + Resource myresource= (Resource) e.nextElement(); if (myresource.isDirectory() && match(myresource.getName())) { myvector.addElement(myresource.getName()); } @@ -206,15 +208,15 @@ public class ZipScanner extends DirectoryScanner { Vector myvector = new Vector(); // first check if the archive needs to be scanned again scanme(); - for (int counter = 0; counter < myentries.size(); counter++) { - Resource myresource = (Resource) myentries.elementAt(counter); - if (!myresource.isDirectory() && match(myresource.getName())) { - myvector.addElement(myresource.clone()); - } - } - Resource[] resources = new Resource[myvector.size()]; - myvector.copyInto(resources); - return resources; + for (Enumeration e = myentries.elements() ; e.hasMoreElements() ;) { + Resource myresource= (Resource) e.nextElement(); + if (!myresource.isDirectory() && match(myresource.getName())) { + myvector.addElement(myresource.clone()); + } + } + Resource[] resources = new Resource[myvector.size()]; + myvector.copyInto(resources); + return resources; } /** @@ -230,17 +232,17 @@ public class ZipScanner extends DirectoryScanner { */ public Resource[] getIncludedDirectoryResources() { Vector myvector = new Vector(); - // first check if the archive needs to be scanned again - scanme(); - for (int counter = 0; counter < myentries.size(); counter++) { - Resource myresource = (Resource) myentries.elementAt(counter); - if (myresource.isDirectory() && match(myresource.getName())) { - myvector.addElement(myresource.clone()); - } - } - Resource[] resources = new Resource[myvector.size()]; - myvector.copyInto(resources); - return resources; + // first check if the archive needs to be scanned again + scanme(); + for (Enumeration e = myentries.elements() ; e.hasMoreElements() ;) { + Resource myresource= (Resource) e.nextElement(); + if (myresource.isDirectory() && match(myresource.getName())) { + myvector.addElement(myresource.clone()); + } + } + Resource[] resources = new Resource[myvector.size()]; + myvector.copyInto(resources); + return resources; } /** @@ -255,17 +257,16 @@ public class ZipScanner extends DirectoryScanner { // special case in ZIPs, we do not want this thing included return new Resource("", true, Long.MAX_VALUE, true); } - + // first check if the archive needs to be scanned again scanme(); - for (int counter = 0; counter < myentries.size(); counter++) { - Resource myresource=(Resource)myentries.elementAt(counter); - if (myresource.getName().equals(name) - || myresource.getName().equals(name + "/")) { - return myresource; - } + if (myentries.containsKey(name)) { + return (Resource) myentries.get(name); + } else if (myentries.containsKey(name + "/")) { + return (Resource) myentries.get(name + "/"); + } else { + return new Resource(name); } - return new Resource(name); } /** @@ -281,26 +282,25 @@ public class ZipScanner extends DirectoryScanner { srcFile.lastModified()); // spare scanning again and again - if (lastScannedResource != null + if (lastScannedResource != null && lastScannedResource.getName().equals(thisresource.getName()) - && lastScannedResource.getLastModified() - == thisresource.getLastModified()) { + && lastScannedResource.getLastModified() + == thisresource.getLastModified()) { return; } - Vector vResult = new Vector(); if (task != null) { task.log("checking zip entries: " + srcFile, Project.MSG_VERBOSE); } ZipEntry entry = null; ZipInputStream in = null; - myentries = new Vector(); + myentries = new Hashtable(); try { try { in = new ZipInputStream(new FileInputStream(srcFile)); if (task != null) { - task.log("opening input stream from " + srcFile, + task.log("opening input stream from " + srcFile, Project.MSG_DEBUG); } } catch (IOException ex) { @@ -309,22 +309,22 @@ public class ZipScanner extends DirectoryScanner { task.log("problem opening "+srcFile,Project.MSG_ERR); } } - + while (true) { try { entry = in.getNextEntry(); if (entry == null) { break; } - myentries.addElement(new Resource(entry.getName(), - true, - entry.getTime(), + myentries.put(new String(entry.getName()), + new Resource(entry.getName(), true, + entry.getTime(), entry.isDirectory())); if (task != null) { task.log("adding entry " + entry.getName() + " from " + srcFile, Project.MSG_DEBUG); } - + } catch (ZipException ex) { // XXX - throw a BuildException instead ?? if (task != null ) {