11176bdada62cabc6ec4b0308a930e83b679d5d36John Reck/* 21176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * ProGuard -- shrinking, optimization, obfuscation, and preverification 31176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * of Java bytecode. 41176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * 51176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * Copyright (c) 2002-2013 Eric Lafortune (eric@graphics.cornell.edu) 61176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * 71176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * This program is free software; you can redistribute it and/or modify it 81176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * under the terms of the GNU General Public License as published by the Free 91176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * Software Foundation; either version 2 of the License, or (at your option) 101176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * any later version. 111176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * 121176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * This program is distributed in the hope that it will be useful, but WITHOUT 131176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 141176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 151176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * more details. 161176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * 171176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * You should have received a copy of the GNU General Public License along 181176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * with this program; if not, write to the Free Software Foundation, Inc., 191176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 201176bdada62cabc6ec4b0308a930e83b679d5d36John Reck */ 211176bdada62cabc6ec4b0308a930e83b679d5d36John Reckpackage proguard.io; 221176bdada62cabc6ec4b0308a930e83b679d5d36John Reck 231176bdada62cabc6ec4b0308a930e83b679d5d36John Reckimport java.io.IOException; 241176bdada62cabc6ec4b0308a930e83b679d5d36John Reckimport java.util.zip.*; 251176bdada62cabc6ec4b0308a930e83b679d5d36John Reck 261176bdada62cabc6ec4b0308a930e83b679d5d36John Reck/** 271176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * This DataEntryReader lets a given DataEntryReader read all data entries of 281176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * the read jar/war/zip data entries. 291176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * 301176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * @author Eric Lafortune 311176bdada62cabc6ec4b0308a930e83b679d5d36John Reck */ 321176bdada62cabc6ec4b0308a930e83b679d5d36John Reckpublic class JarReader implements DataEntryReader 331176bdada62cabc6ec4b0308a930e83b679d5d36John Reck{ 341176bdada62cabc6ec4b0308a930e83b679d5d36John Reck private final DataEntryReader dataEntryReader; 351176bdada62cabc6ec4b0308a930e83b679d5d36John Reck 361176bdada62cabc6ec4b0308a930e83b679d5d36John Reck 371176bdada62cabc6ec4b0308a930e83b679d5d36John Reck /** 381176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * Creates a new JarReader. 391176bdada62cabc6ec4b0308a930e83b679d5d36John Reck */ 401176bdada62cabc6ec4b0308a930e83b679d5d36John Reck public JarReader(DataEntryReader dataEntryReader) 411176bdada62cabc6ec4b0308a930e83b679d5d36John Reck { 421176bdada62cabc6ec4b0308a930e83b679d5d36John Reck this.dataEntryReader = dataEntryReader; 431176bdada62cabc6ec4b0308a930e83b679d5d36John Reck } 441176bdada62cabc6ec4b0308a930e83b679d5d36John Reck 451176bdada62cabc6ec4b0308a930e83b679d5d36John Reck 461176bdada62cabc6ec4b0308a930e83b679d5d36John Reck // Implementation for DataEntryReader. 471176bdada62cabc6ec4b0308a930e83b679d5d36John Reck 481176bdada62cabc6ec4b0308a930e83b679d5d36John Reck public void read(DataEntry dataEntry) throws IOException 491176bdada62cabc6ec4b0308a930e83b679d5d36John Reck { 501176bdada62cabc6ec4b0308a930e83b679d5d36John Reck ZipInputStream zipInputStream = new ZipInputStream(dataEntry.getInputStream()); 511176bdada62cabc6ec4b0308a930e83b679d5d36John Reck 521176bdada62cabc6ec4b0308a930e83b679d5d36John Reck try 531176bdada62cabc6ec4b0308a930e83b679d5d36John Reck { 541176bdada62cabc6ec4b0308a930e83b679d5d36John Reck // Get all entries from the input jar. 551176bdada62cabc6ec4b0308a930e83b679d5d36John Reck while (true) 561176bdada62cabc6ec4b0308a930e83b679d5d36John Reck { 571176bdada62cabc6ec4b0308a930e83b679d5d36John Reck // Can we get another entry? 581176bdada62cabc6ec4b0308a930e83b679d5d36John Reck ZipEntry zipEntry = zipInputStream.getNextEntry(); 591176bdada62cabc6ec4b0308a930e83b679d5d36John Reck if (zipEntry == null) 601176bdada62cabc6ec4b0308a930e83b679d5d36John Reck { 611176bdada62cabc6ec4b0308a930e83b679d5d36John Reck break; 621176bdada62cabc6ec4b0308a930e83b679d5d36John Reck } 631176bdada62cabc6ec4b0308a930e83b679d5d36John Reck 641176bdada62cabc6ec4b0308a930e83b679d5d36John Reck // Delegate the actual reading to the data entry reader. 651176bdada62cabc6ec4b0308a930e83b679d5d36John Reck dataEntryReader.read(new ZipDataEntry(dataEntry, 661176bdada62cabc6ec4b0308a930e83b679d5d36John Reck zipEntry, 671176bdada62cabc6ec4b0308a930e83b679d5d36John Reck zipInputStream)); 681176bdada62cabc6ec4b0308a930e83b679d5d36John Reck } 691176bdada62cabc6ec4b0308a930e83b679d5d36John Reck } 701176bdada62cabc6ec4b0308a930e83b679d5d36John Reck finally 711176bdada62cabc6ec4b0308a930e83b679d5d36John Reck { 721176bdada62cabc6ec4b0308a930e83b679d5d36John Reck dataEntry.closeInputStream(); 731176bdada62cabc6ec4b0308a930e83b679d5d36John Reck } 741176bdada62cabc6ec4b0308a930e83b679d5d36John Reck } 751176bdada62cabc6ec4b0308a930e83b679d5d36John Reck} 761176bdada62cabc6ec4b0308a930e83b679d5d36John Reck