summaryrefslogtreecommitdiffstats
path: root/libjava/java/util/jar/JarInputStream.java
diff options
context:
space:
mode:
authorgreen <green@138bc75d-0d04-0410-961f-82ee72b054a4>2000-08-19 18:19:42 +0000
committergreen <green@138bc75d-0d04-0410-961f-82ee72b054a4>2000-08-19 18:19:42 +0000
commit121fbaa55ea2cfc6316c95d38eaa0db137de793d (patch)
tree2dff323eee68e61f9225ea0c6c7f15f7c6bcd624 /libjava/java/util/jar/JarInputStream.java
parenta8081abb437b8376c9869c342ffcd3c486098a9d (diff)
downloadppe42-gcc-121fbaa55ea2cfc6316c95d38eaa0db137de793d.tar.gz
ppe42-gcc-121fbaa55ea2cfc6316c95d38eaa0db137de793d.zip
Sat Aug 19 11:00:53 2000 Anthony Green <green@redhat.com>
* java/util/jar/Attributes.java, java/util/jar/JarEntry.java, java/util/jar/JarException.java, java/util/jar/JarFile.java, java/util/jar/JarInputStream.java, java/util/jar/JarOutputStream.java, java/util/jar/Manifest.java, java/util/Set.java, java/util/Map.java, java/util/Bucket.java, java/util/AbstractSet.java, java/util/BasicMapEntry.java, java/security/cert/CRL.java, java/security/cert/CRLException.java, java/security/cert/Certificate.java, java/security/cert/CertificateEncodingException.java, java/security/cert/CertificateException.java, java/security/cert/CertificateExpiredException.java, java/security/cert/CertificateFactory.java, java/security/cert/CertificateFactorySpi.java, java/security/cert/CertificateNotYetValidException.java, java/security/cert/CertificateParsingException.java, java/security/cert/X509CRL.java, java/security/cert/X509CRLEntry.java, java/security/cert/X509Certificate.java, java/security/cert/X509Extension.java: Imported from Classpath. * java/util/Hashtable.java: Imported from Classpath. * java/util/zip/ZipInputStream.java: Create stub for createZipEntry. * gcj/javaprims.h: Updated class list. * Makefile.in, gcj/Makefile.in: Rebuilt. * Makefile.am (ordinary_java_source_files): Add these new classes. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@35809 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/util/jar/JarInputStream.java')
-rw-r--r--libjava/java/util/jar/JarInputStream.java181
1 files changed, 162 insertions, 19 deletions
diff --git a/libjava/java/util/jar/JarInputStream.java b/libjava/java/util/jar/JarInputStream.java
index 33daf61c5fb..c8f5340637b 100644
--- a/libjava/java/util/jar/JarInputStream.java
+++ b/libjava/java/util/jar/JarInputStream.java
@@ -1,32 +1,175 @@
-/* Copyright (C) 1999 Free Software Foundation
+/* JarInputStream.java - InputStream for reading jar files
+ Copyright (C) 2000 Free Software Foundation, Inc.
- This file is part of libgcj.
+This file is part of GNU Classpath.
-This software is copyrighted work licensed under the terms of the
-Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
-details. */
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
package java.util.jar;
-import java.util.zip.*;
+import java.io.InputStream;
+import java.io.IOException;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
/**
- * Does not implement any of the security. Just a place holder, so
- * that I can implement URLClassLoader.
+ * InputStream for reading jar files.
+ * XXX - verification of the signatures in the Manifest file is not yet
+ * implemented.
*
- * @author Kresten Krab Thorup <krab@gnu.org>
- * @date August 10, 1999.
+ * @since 1.2
+ * @author Mark Wielaard (mark@klomp.org)
*/
+
+public class JarInputStream extends ZipInputStream {
+
+ // Fields
+
+ /** The manifest for this file or null when there was no manifest. */
+ private Manifest manifest;
+
+ /** The first real JarEntry for this file. Used by readManifest() to store
+ an entry that isn't the manifest but that should be returned by
+ getNextEntry next time it is called. Null when no firstEntry was read
+ while searching for the manifest entry, or when it has already been
+ returned by getNextEntry(). */
+ private JarEntry firstEntry;
+
+ // Constructors
+
+ /**
+ * Creates a new JarInputStream and tries to read the manifest.
+ * If such a manifest is present the JarInputStream tries to verify all
+ * the entry signatures while reading.
+ *
+ * @param in InputStream to read the jar from
+ * @exception IOException when an error occurs when opening or reading
+ */
+ public JarInputStream(InputStream in) throws IOException {
+ this(in, true);
+ }
+
+ /**
+ * Creates a new JarInputStream and tries to read the manifest.
+ * If such a manifest is present and verify is true, the JarInputStream
+ * tries to verify all the entry signatures while reading.
+ *
+ * @param in InputStream to read the jar from
+ * @param verify wheter or not to verify the manifest entries
+ * @exception IOException when an error occurs when opening or reading
+ */
+ public JarInputStream(InputStream in, boolean verify) throws IOException {
+ super(in);
+ readManifest(verify);
+ }
-public class JarInputStream extends ZipInputStream
-{
- public JarEntry getNextJarEntry () throws java.io.IOException
- {
- return new JarEntry (getNextEntry ());
+ // Methods
+
+ /**
+ * Set the manifest if found. Skips all entries that start with "META-INF/"
+ *
+ * @param verify when true (and a Manifest is found) checks the Manifest,
+ * when false no check is performed
+ * @exception IOException if an error occurs while reading
+ */
+ private void readManifest(boolean verify) throws IOException {
+ firstEntry = (JarEntry) super.getNextEntry();
+ while ((firstEntry != null) &&
+ firstEntry.getName().startsWith("META-INF/")) {
+ if(firstEntry.getName().equals(JarFile.MANIFEST_NAME)) {
+ manifest = new Manifest(this);
+ }
+ firstEntry = (JarEntry) super.getNextEntry();
+ }
+ closeEntry();
+
+ if (verify) {
+ // XXX
+ }
+ }
+
+ /**
+ * Creates a JarEntry for a particular name and consults the manifest
+ * for the Attributes of the entry.
+ * Used by <code>ZipEntry.getNextEntry()</code>
+ *
+ * @param name the name of the new entry
+ */
+ protected ZipEntry createZipEntry(String name) {
+ ZipEntry zipEntry = super.createZipEntry(name);
+ JarEntry jarEntry = new JarEntry(zipEntry);
+ if (manifest != null) {
+ jarEntry.attr = manifest.getAttributes(name);
+ }
+ return jarEntry;
+ }
+
+ /**
+ * Returns the Manifest for the jar file or null if there was no Manifest.
+ */
+ public Manifest getManifest() {
+ return manifest;
}
- public JarInputStream (java.io.InputStream is)
- {
- super(is);
- }
+ /**
+ * Returns the next entry or null when there are no more entries.
+ * Does actually return a JarEntry, if you don't want to cast it yourself
+ * use <code>getNextJarEntry()</code>. Does not return any entries found
+ * at the beginning of the ZipFile that are special
+ * (those that start with "META-INF/").
+ *
+ * @exception IOException if an IO error occurs when reading the entry
+ */
+ public ZipEntry getNextEntry() throws IOException {
+ ZipEntry entry;
+ if (firstEntry != null) {
+ entry = firstEntry;
+ firstEntry = null;
+ } else {
+ entry = super.getNextEntry();
+ }
+ return entry;
+ }
+
+ /**
+ * Returns the next jar entry or null when there are no more entries.
+ *
+ * @exception IOException if an IO error occurs when reading the entry
+ */
+ public JarEntry getNextJarEntry() throws IOException {
+ return (JarEntry)getNextEntry();
+ }
+
+ /**
+ * XXX
+ *
+ * @param buf XXX
+ * @param off XXX
+ * @param len XXX
+ * @return XXX
+ * @exception IOException XXX
+ */
+ public int read(byte[] buf, int off, int len) throws IOException {
+ // XXX if (verify) {}
+ return super.read(buf, off, len);
+ }
}
OpenPOWER on IntegriCloud