This is the mail archive of the java-patches@sources.redhat.com mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Various gij/jar/zip patches



I'm checking in the following patches.  Most of them were necessary in
order to pull class files out of compressed archives, like so:

gij -Djava.class.path=/horton/green/net/test/Hello.jar Hello


Sun Aug 20 09:51:48 2000  Anthony Green  <green@redhat.com>

	* java/net/URLClassLoader.java: Find the JarEntry via the JarFile.

	* java/net/JarURLConnection.java: getEntry doesn't take any
	arguments.  Return null if element is null.

	* java/util/zip/ZipFile.java (getInputStream): Read the compressed
	size from the archive, not the inflated size.

	* java/util/jar/JarFile.java (getEntry): Don't recurse.  Call
	java.util.zip.ZipFile.getEntry.

	* gij.cc (help): Change sourceware reference to
	sources.redhat.com.


Some of these patches should go back into the GNU Classpath source
base, but I don't believe I have an account yet.


Index: libjava/gij.cc
===================================================================
RCS file: /cvs/java/libgcj/libjava/gij.cc,v
retrieving revision 1.9
diff -u -p -u -r1.9 gij.cc
--- gij.cc	2000/05/31 22:49:18	1.9
+++ gij.cc	2000/08/20 17:38:56
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999  Free Software Foundation
+/* Copyright (C) 1999, 2000  Free Software Foundation
 
    This file is part of libgcj.
 
@@ -31,7 +31,7 @@ help ()
   printf ("  --ms=NUMBER       set initial heap size\n");
   printf ("  --mx=NUMBER       set maximum heap size\n");
   printf ("  --version         print version number, then exit\n");
-  printf ("\nSee http://sourceware.cygnus.com/java/ for information on reporting bugs\n");
+  printf ("\nSee http://sources.redhat.com/java/ for information on reporting bugs\n");
   exit (0);
 }
 
@@ -39,7 +39,7 @@ static void
 version ()
 {
   printf ("gij (GNU libgcj) version %s\n\n", VERSION);
-  printf ("Copyright (C) 1999 Free Software Foundation.\n");
+  printf ("Copyright (C) 1999, 2000 Free Software Foundation.\n");
   printf ("This is free software; see the source for copying conditions.  There is NO\n");
   printf ("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
   exit (0);
Index: libjava/java/net/JarURLConnection.java
===================================================================
RCS file: /cvs/java/libgcj/libjava/java/net/JarURLConnection.java,v
retrieving revision 1.3
diff -u -p -u -r1.3 JarURLConnection.java
--- JarURLConnection.java	2000/03/07 19:55:27	1.3
+++ JarURLConnection.java	2000/08/20 17:38:56
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999  Free Software Foundation
+/* Copyright (C) 1999, 2000  Free Software Foundation
 
    This file is part of libgcj.
 
@@ -148,11 +148,13 @@ public abstract class JarURLConnection e
     return null;
   }
 
-  public JarEntry getJarEntry (String name)
-    throws java.io.IOException
+  public JarEntry getJarEntry () throws java.io.IOException
   {
     JarFile jarfile = null;
 
+    if (element == null)
+      return null;
+
     if (! doInput)
       throw new ProtocolException("Can't open JarEntry if doInput is false");
 
@@ -286,7 +288,7 @@ public abstract class JarURLConnection e
     if (element == null)
       len = jarFileURLConnection.getContentLength ();
     else
-      len = getJarEntry (element).getSize ();
+      len = getJarEntry ().getSize ();
 
     String line = "Content-length: " + len;
     hdrVec.addElement(line);
Index: libjava/java/net/URLClassLoader.java
===================================================================
RCS file: /cvs/java/libgcj/libjava/java/net/URLClassLoader.java,v
retrieving revision 1.3
diff -u -p -u -r1.3 URLClassLoader.java
--- URLClassLoader.java	2000/03/07 19:55:27	1.3
+++ URLClassLoader.java	2000/08/20 17:38:56
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999  Free Software Foundation
+/* Copyright (C) 1999, 2000  Free Software Foundation
 
    This file is part of libgcj.
 
@@ -20,8 +20,8 @@ public class URLClassLoader extends Clas
   // `path' contains simply the URL's we're using for the searching.
   private Vector path; 
 
-  // If path[n] is a zip/jar, then this holds a JarURLConnection for that thing,
-  // otherwise, path[n] is null.
+  // If path[n] is a zip/jar, then this holds a JarURLConnection for
+  // that thing, otherwise, path[n] is null.
   private Vector info; 
 
   private URLStreamHandler getHandler0 (String protocol)
@@ -115,10 +115,10 @@ public class URLClassLoader extends Clas
 	
 	try {
 	  JarURLConnection conn = (JarURLConnection) info.elementAt (i);
-	  
+ 	  
 	  if (conn != null)
 	    {
-	      if (conn.getJarEntry (name) != null)
+	      if (conn.getJarFile().getJarEntry (name) != null)
 		return new URL(u, name, getHandler0 (u.getProtocol()));
 	    }
 	  else
@@ -187,15 +187,15 @@ public class URLClassLoader extends Clas
 
     try 
       {
-	InputStream is = getResourceAsStream (name.replace ('.', '/') + ".class");
-	
-	if (is == null)
+	URL u = getResource (name.replace ('.', '/') + ".class");
+
+	if (u == null)
 	  throw new ClassNotFoundException (name);
-	
-	// Here we have to rely on available() to provide the length of
-	// the class; which might not be exactly right in some cases...
-	
-	int len = is.available ();
+
+	URLConnection connection = u.openConnection ();
+	InputStream is = connection.getInputStream ();
+
+	int len = connection.getContentLength ();
 	byte[] data = new byte[len];
 
 	int left = len;
@@ -216,6 +216,5 @@ public class URLClassLoader extends Clas
 	throw new ClassNotFoundException(name);
       }
   }
-
 }
 
Index: libjava/java/util/jar/JarFile.java
===================================================================
RCS file: /cvs/java/libgcj/libjava/java/util/jar/JarFile.java,v
retrieving revision 1.4
diff -u -p -u -r1.4 JarFile.java
--- JarFile.java	2000/08/19 18:19:42	1.4
+++ JarFile.java	2000/08/20 17:38:56
@@ -232,7 +232,7 @@ public class JarFile extends ZipFile {
     public ZipEntry getEntry(String name) {
         ZipEntry entry = super.getEntry(name);
         if (entry != null) {
-            JarEntry jarEntry = new JarEntry(getEntry(name));
+            JarEntry jarEntry = new JarEntry(super.getEntry(name));
             if (manifest != null) {
                 jarEntry.attr = manifest.getAttributes(name);
                 // XXX jarEntry.certs
Index: libjava/java/util/zip/ZipFile.java
===================================================================
RCS file: /cvs/java/libgcj/libjava/java/util/zip/ZipFile.java,v
retrieving revision 1.9
diff -u -p -u -r1.9 ZipFile.java
--- ZipFile.java	2000/05/20 23:30:46	1.9
+++ ZipFile.java	2000/08/20 17:38:56
@@ -121,7 +121,7 @@ public class ZipFile implements ZipConst
 
   public InputStream getInputStream(ZipEntry ze)  throws IOException
   {
-    byte[] buffer = new byte[(int) ze.getSize()];
+    byte[] buffer = new byte[(int) ze.getCompressedSize()];
 
     /* Read the size of the extra field, and skip to the start of the
        data.  */

-- 
Anthony Green                                                        Red Hat
                                                       Sunnyvale, California

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]