You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by te...@apache.org on 2006/05/31 17:03:49 UTC
svn commit: r410555 - in
/incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar:
Attributes.java InitManifest.java JarEntry.java
Author: tellison
Date: Wed May 31 08:03:48 2006
New Revision: 410555
URL: http://svn.apache.org/viewvc?rev=410555&view=rev
Log:
Source tidy-up and reformatting.
Modified:
incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/Attributes.java
incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/InitManifest.java
incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/JarEntry.java
Modified: incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/Attributes.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/Attributes.java?rev=410555&r1=410554&r2=410555&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/Attributes.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/Attributes.java Wed May 31 08:03:48 2006
@@ -15,7 +15,6 @@
package java.util.jar;
-
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
@@ -28,320 +27,326 @@
*/
public class Attributes implements Cloneable, Map<Object, Object> {
- protected Map<Object, Object> map;
+ protected Map<Object, Object> map;
+
+ public static class Name {
+ private String name;
+
+ private int hashCode;
+
+ public static final Name CLASS_PATH = new Name("Class-Path", false);
+
+ public static final Name MANIFEST_VERSION = new Name(
+ "Manifest-Version", false);
+
+ public static final Name MAIN_CLASS = new Name("Main-Class", false);
+
+ public static final Name SIGNATURE_VERSION = new Name(
+ "Signature-Version", false);
+
+ public static final Name CONTENT_TYPE = new Name("Content-Type", false);
+
+ public static final Name SEALED = new Name("Sealed", false);
+
+ public static final Name IMPLEMENTATION_TITLE = new Name(
+ "Implementation-Title", false);
+
+ public static final Name IMPLEMENTATION_VERSION = new Name(
+ "Implementation-Version", false);
+
+ public static final Name IMPLEMENTATION_VENDOR = new Name(
+ "Implementation-Vendor", false);
+
+ public static final Name SPECIFICATION_TITLE = new Name(
+ "Specification-Title", false);
+
+ public static final Name SPECIFICATION_VERSION = new Name(
+ "Specification-Version", false);
+
+ public static final Name SPECIFICATION_VENDOR = new Name(
+ "Specification-Vendor", false);
+
+ public static final Name EXTENSION_LIST = new Name("Extension-List",
+ false);
- public static class Name {
- private String name;
+ public static final Name EXTENSION_NAME = new Name("Extension-Name",
+ false);
- private int hashCode;
+ public static final Name EXTENSION_INSTALLATION = new Name(
+ "Extension-Installation", false);
- public static final Name CLASS_PATH = new Name("Class-Path", false);
+ public static final Name IMPLEMENTATION_VENDOR_ID = new Name(
+ "Implementation-Vendor-Id", false);
- public static final Name MANIFEST_VERSION = new Name(
- "Manifest-Version", false);
-
- public static final Name MAIN_CLASS = new Name("Main-Class", false);
-
- public static final Name SIGNATURE_VERSION = new Name(
- "Signature-Version", false);
-
- public static final Name CONTENT_TYPE = new Name("Content-Type", false);
-
- public static final Name SEALED = new Name("Sealed", false);
-
- public static final Name IMPLEMENTATION_TITLE = new Name(
- "Implementation-Title", false);
-
- public static final Name IMPLEMENTATION_VERSION = new Name(
- "Implementation-Version", false);
-
- public static final Name IMPLEMENTATION_VENDOR = new Name(
- "Implementation-Vendor", false);
-
- public static final Name SPECIFICATION_TITLE = new Name(
- "Specification-Title", false);
-
- public static final Name SPECIFICATION_VERSION = new Name(
- "Specification-Version", false);
-
- public static final Name SPECIFICATION_VENDOR = new Name(
- "Specification-Vendor", false);
-
- public static final Name EXTENSION_LIST = new Name("Extension-List",
- false);
-
- public static final Name EXTENSION_NAME = new Name("Extension-Name",
- false);
-
- public static final Name EXTENSION_INSTALLATION = new Name(
- "Extension-Installation", false);
-
- public static final Name IMPLEMENTATION_VENDOR_ID = new Name(
- "Implementation-Vendor-Id", false);
-
- public static final Name IMPLEMENTATION_URL = new Name(
- "Implementation-URL", false);
-
- public Name(String s) {
- int i = s.length();
- if (i == 0 || i > 70)
- throw new IllegalArgumentException();
- for (; --i >= 0;) {
- char ch = s.charAt(i);
- if (!((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')
- || ch == '_' || ch == '-' || (ch >= '0' && ch <= '9')))
- throw new IllegalArgumentException(s);
- }
- name = s;
- }
-
- Name(String s, boolean ignored) {
- name = s;
- }
-
- public String toString() {
- return name;
- }
-
- public boolean equals(Object an) {
- if (an == null)
- return false;
- return an.getClass() == this.getClass()
- && name.equalsIgnoreCase(((Name) an).name);
- }
-
- public int hashCode() {
- if (hashCode == 0)
- hashCode = name.toLowerCase().hashCode();
- return hashCode;
- }
- }
-
- /**
- * Constructs an Attributes instance
- */
- public Attributes() {
- map = new HashMap<Object, Object>();
- }
-
- /**
- * Constructs an Attributes instance obtaining keys and values from the
- * parameter Attributes, attrib
- *
- * @param attrib
- * The Attributes to obtain entries from.
- */
- public Attributes(Attributes attrib) {
- map = (Map<Object, Object>)((HashMap) attrib.map).clone();
- }
-
- /**
- * Constructs an Attributes instance with initial capacity of size size
- *
- * @param size
- * Initial size of this Attributes instance.
- */
- public Attributes(int size) {
- map = new HashMap<Object, Object>(size);
- }
-
- /**
- * Removes all key/value pairs from this Attributes.
- *
- */
- public void clear() {
- map.clear();
- }
-
- /**
- * Determines whether this Attributes contains the specified key
- *
- *
- * @param key
- * The key to search for.
- * @return true if the key is found, false otherwise
- */
- public boolean containsKey(Object key) {
- return map.containsKey(key);
- }
-
- /**
- * Determines whether this Attributes contains the specified value
- *
- * @param value
- * The value to search for.
- * @return true if the value is found, false otherwise
- */
- public boolean containsValue(Object value) {
- return map.containsValue(value);
- }
-
- /**
- * Returns a set containing MapEntry's for each of the key/value pairs
- * contained in this Attributes.
- *
- * @return a set of MapEntry's
- */
- public Set<Map.Entry<Object, Object>> entrySet() {
- return map.entrySet();
- }
-
- /**
- * Returns the value associated with the parameter key
- *
- * @param key
- * The key to search for.
- * @return Object associated with key, or null if key does not exist.
- */
- public Object get(Object key) {
- return map.get(key);
- }
-
- /**
- * Determines whether this Attributes contains any keys
- *
- * @return true if one or more keys exist, false otherwise
- */
- public boolean isEmpty() {
- return map.isEmpty();
- }
-
- /**
- * Returns a Set containing all the keys found in this Attributes.
- *
- * @return a Set of all keys
- */
- public Set<Object> keySet() {
- return map.keySet();
- }
-
- /**
- * Store value in this Attributes and associate it with key.
- *
- * @param key
- * The key to associate with value.
- * @param value
- * The value to store in this Attributes
- * @return The value being stored
- *
- * @exception ClassCastException
- * when key is not an Attributes.Name or value is not a
- * String
- */
- public Object put(Object key, Object value) {
- return map.put((Name)key, (String)value);
- }
-
- /**
- * Store all the key.value pairs in the argument in this Attributes.
- *
- * @param attrib
- * the associations to store (must be of type Attributes).
- */
- public void putAll(Map<?, ?> attrib) {
- if( attrib == null ) {
+ public static final Name IMPLEMENTATION_URL = new Name(
+ "Implementation-URL", false);
+
+ public Name(String s) {
+ int i = s.length();
+ if (i == 0 || i > 70) {
+ throw new IllegalArgumentException();
+ }
+ for (; --i >= 0;) {
+ char ch = s.charAt(i);
+ if (!((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')
+ || ch == '_' || ch == '-' || (ch >= '0' && ch <= '9'))) {
+ throw new IllegalArgumentException(s);
+ }
+ }
+ name = s;
+ }
+
+ Name(String s, boolean ignored) {
+ name = s;
+ }
+
+ public String toString() {
+ return name;
+ }
+
+ public boolean equals(Object an) {
+ if (an == null) {
+ return false;
+ }
+ return an.getClass() == this.getClass()
+ && name.equalsIgnoreCase(((Name) an).name);
+ }
+
+ public int hashCode() {
+ if (hashCode == 0) {
+ hashCode = name.toLowerCase().hashCode();
+ }
+ return hashCode;
+ }
+ }
+
+ /**
+ * Constructs an Attributes instance
+ */
+ public Attributes() {
+ map = new HashMap<Object, Object>();
+ }
+
+ /**
+ * Constructs an Attributes instance obtaining keys and values from the
+ * parameter Attributes, attrib
+ *
+ * @param attrib
+ * The Attributes to obtain entries from.
+ */
+ public Attributes(Attributes attrib) {
+ map = (Map<Object, Object>) ((HashMap) attrib.map).clone();
+ }
+
+ /**
+ * Constructs an Attributes instance with initial capacity of size size
+ *
+ * @param size
+ * Initial size of this Attributes instance.
+ */
+ public Attributes(int size) {
+ map = new HashMap<Object, Object>(size);
+ }
+
+ /**
+ * Removes all key/value pairs from this Attributes.
+ *
+ */
+ public void clear() {
+ map.clear();
+ }
+
+ /**
+ * Determines whether this Attributes contains the specified key
+ *
+ *
+ * @param key
+ * The key to search for.
+ * @return true if the key is found, false otherwise
+ */
+ public boolean containsKey(Object key) {
+ return map.containsKey(key);
+ }
+
+ /**
+ * Determines whether this Attributes contains the specified value
+ *
+ * @param value
+ * The value to search for.
+ * @return true if the value is found, false otherwise
+ */
+ public boolean containsValue(Object value) {
+ return map.containsValue(value);
+ }
+
+ /**
+ * Returns a set containing MapEntry's for each of the key/value pairs
+ * contained in this Attributes.
+ *
+ * @return a set of MapEntry's
+ */
+ public Set<Map.Entry<Object, Object>> entrySet() {
+ return map.entrySet();
+ }
+
+ /**
+ * Returns the value associated with the parameter key
+ *
+ * @param key
+ * The key to search for.
+ * @return Object associated with key, or null if key does not exist.
+ */
+ public Object get(Object key) {
+ return map.get(key);
+ }
+
+ /**
+ * Determines whether this Attributes contains any keys
+ *
+ * @return true if one or more keys exist, false otherwise
+ */
+ public boolean isEmpty() {
+ return map.isEmpty();
+ }
+
+ /**
+ * Returns a Set containing all the keys found in this Attributes.
+ *
+ * @return a Set of all keys
+ */
+ public Set<Object> keySet() {
+ return map.keySet();
+ }
+
+ /**
+ * Store value in this Attributes and associate it with key.
+ *
+ * @param key
+ * The key to associate with value.
+ * @param value
+ * The value to store in this Attributes
+ * @return The value being stored
+ *
+ * @exception ClassCastException
+ * when key is not an Attributes.Name or value is not a
+ * String
+ */
+ public Object put(Object key, Object value) {
+ return map.put(key, value);
+ }
+
+ /**
+ * Store all the key.value pairs in the argument in this Attributes.
+ *
+ * @param attrib
+ * the associations to store (must be of type Attributes).
+ */
+ public void putAll(Map<?, ?> attrib) {
+ if (attrib == null) {
throw new ClassCastException();
}
- this.map.putAll((Attributes) attrib);
- }
+ this.map.putAll(attrib);
+ }
+
+ /**
+ * Deletes the key/value pair with key key from this Attributes.
+ *
+ * @param key
+ * The key to remove
+ * @return the values associated with the removed key, null if not present.
+ */
+ public Object remove(Object key) {
+ return map.remove(key);
+ }
+
+ /**
+ * Returns the number of key.value pairs associated with this Attributes.
+ *
+ * @return the size of this Attributes
+ */
+ public int size() {
+ return map.size();
+ }
+
+ /**
+ * Returns a Collection of all the values present in this Attributes.
+ *
+ * @return a Collection of all values present
+ */
+ public Collection<Object> values() {
+ return map.values();
+ }
+
+ public Object clone() {
+ Attributes clone;
+ try {
+ clone = (Attributes) super.clone();
+ } catch (CloneNotSupportedException e) {
+ return null;
+ }
+ clone.map = (Map<Object, Object>) ((HashMap) this.map).clone();
+ return clone;
+ }
+
+ /**
+ * Returns the hashCode of this Attributes
+ *
+ * @return the hashCode of this Object.
+ */
+ public int hashCode() {
+ return map.hashCode();
+ }
+
+ /**
+ * Determines if this Attributes and the parameter Attributes are equal. Two
+ * Attributes instances are equal if they contain the same keys and values.
+ *
+ * @return true if the Attributes are equals, false otherwise
+ */
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof Attributes) {
+ return map.equals(((Attributes) obj).map);
+ }
+ return false;
+ }
- /**
- * Deletes the key/value pair with key key from this Attributes.
- *
- * @param key
- * The key to remove
- * @return the values associated with the removed key, null if not present.
- */
- public Object remove(Object key) {
- return map.remove(key);
- }
-
- /**
- * Returns the number of key.value pairs associated with this Attributes.
- *
- * @return the size of this Attributes
- */
- public int size() {
- return map.size();
- }
-
- /**
- * Returns a Collection of all the values present in this Attributes.
- *
- * @return a Collection of all values present
- */
- public Collection<Object> values() {
- return map.values();
- }
-
- public Object clone() {
- Attributes clone;
- try {
- clone = (Attributes) super.clone();
- } catch (CloneNotSupportedException e) {
- return null;
- }
- clone.map = (Map<Object, Object>) ((HashMap) this.map).clone();
- return clone;
- }
-
- /**
- * Returns the hashCode of this Attributes
- *
- * @return the hashCode of this Object.
- */
- public int hashCode() {
- return map.hashCode();
- }
-
- /**
- * Determines if this Attributes and the parameter Attributes are equal. Two
- * Attributes instances are equal if they contain the same keys and values.
- *
- * @return true if the Attributes are equals, false otherwise
- */
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj instanceof Attributes)
- return map.equals(((Attributes) obj).map);
- return false;
- }
-
- /**
- * Returns the value associated with the parameter Attributes.Name key.
- *
- * @param name
- * The key to obtain the value for.
- * @return the String associated with name, or null if name is not a valid
- * key
- */
- public String getValue(Attributes.Name name) {
- return (String) map.get(name);
- }
-
- /**
- * Returns the String associated with the parameter name.
- *
- * @param name
- * The key to obtain the value for.
- * @return the String associated with name, or null if name is not a valid
- * key
- */
- public String getValue(String name) {
- return (String) map.get(new Attributes.Name(name));
- }
-
- /**
- * Stores value val against key name in this Attributes
- *
- * @param name
- * The key to store against.
- * @param val
- * The value to store in this Attributes
- * @return the Value being stored
- */
- public String putValue(String name, String val) {
- return (String) map.put(new Attributes.Name(name), val);
- }
+ /**
+ * Returns the value associated with the parameter Attributes.Name key.
+ *
+ * @param name
+ * The key to obtain the value for.
+ * @return the String associated with name, or null if name is not a valid
+ * key
+ */
+ public String getValue(Attributes.Name name) {
+ return (String) map.get(name);
+ }
+
+ /**
+ * Returns the String associated with the parameter name.
+ *
+ * @param name
+ * The key to obtain the value for.
+ * @return the String associated with name, or null if name is not a valid
+ * key
+ */
+ public String getValue(String name) {
+ return (String) map.get(new Attributes.Name(name));
+ }
+
+ /**
+ * Stores value val against key name in this Attributes
+ *
+ * @param name
+ * The key to store against.
+ * @param val
+ * The value to store in this Attributes
+ * @return the Value being stored
+ */
+ public String putValue(String name, String val) {
+ return (String) map.put(new Attributes.Name(name), val);
+ }
}
Modified: incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/InitManifest.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/InitManifest.java?rev=410555&r1=410554&r2=410555&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/InitManifest.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/InitManifest.java Wed May 31 08:03:48 2006
@@ -15,7 +15,6 @@
package java.util.jar;
-
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -32,247 +31,265 @@
import org.apache.harmony.luni.util.Util;
class InitManifest {
- private byte[] inbuf = new byte[1024];
+ private byte[] inbuf = new byte[1024];
- private int inbufCount = 0, inbufPos = 0;
+ private int inbufCount = 0, inbufPos = 0;
- private byte[] buffer = new byte[5];
+ private byte[] buffer = new byte[5];
- private char[] charbuf = new char[0];
+ private char[] charbuf = new char[0];
- private ByteArrayOutputStream out = new ByteArrayOutputStream(256);
-
- private String encoding;
-
- private boolean usingUTF8 = true;
-
- private Map<String, Attributes.Name> attributeNames =
- new HashMap<String, Attributes.Name>();
-
- private byte[] mainAttributesChunk;
-
- InitManifest(InputStream is, Attributes main, Map entries, Map chunks,
- String verString) throws IOException {
- encoding = (String) AccessController.doPrivileged(new PriviAction(
- "manifest.read.encoding"));
- if ("".equals(encoding)) {
- encoding = null;
- }
-
- Attributes current = main;
- ArrayList<String> list = new ArrayList<String>();
-
- //Return the chunk of main attributes in the manifest.
- mainAttributesChunk = nextChunk(is,list);
-
- Iterator it = list.iterator();
- while (it.hasNext())
- addAttribute((String) it.next(), current);
-
- // Check for version attribute
- if (verString != null && main.getValue(verString) == null)
- throw new IOException(Msg.getString("K0009", verString));
-
- list.clear();
- byte[] chunk = null;
- while (chunks == null ? readLines(is, list) : (chunk = nextChunk(is,
- list)) != null) {
- it = list.iterator();
- String line = (String) it.next();
- if (line.length() < 7
- || !line.substring(0, 5).toLowerCase().equals("name:"))
- throw new IOException(Msg.getString("K000a"));
- // Name: length required space char
- String name = line.substring(6, line.length());
- current = new Attributes(12);
- if (chunks != null)
- chunks.put(name, chunk);
- entries.put(name, current);
- while (it.hasNext())
- addAttribute((String) it.next(), current);
- list.clear();
- }
-
- }
-
- byte[] getMainAttributesChunk()
- {
- return mainAttributesChunk;
- }
-
- private void addLine(int length, List<String> lines) throws IOException {
- if (encoding != null) {
- lines.add(new String(buffer, 0, length, encoding));
- } else {
- if (usingUTF8) {
- try {
- if (charbuf.length < length)
- charbuf = new char[length];
- lines.add(Util.convertUTF8WithBuf(buffer, charbuf, 0,
- length));
- } catch (UTFDataFormatException e) {
- usingUTF8 = false;
- }
- }
- if (!usingUTF8) {
- if (charbuf.length < length)
- charbuf = new char[length];
- // If invalid UTF8, convert bytes to chars setting the upper
- // bytes to zeros
- int charOffset = 0;
- int offset = 0;
- for (int i = length; --i >= 0;) {
- charbuf[charOffset++] = (char) ((int) buffer[offset++] & 0xff);
- }
- lines.add(new String(charbuf, 0, length));
- }
- }
- }
-
- private byte[] nextChunk(InputStream in, List<String> lines) throws IOException {
- if (inbufCount == -1)
- return null;
- byte next;
- int pos = 0;
- boolean blankline = false, lastCr = false;
- out.reset();
- while (true) {
- if (inbufPos == inbufCount) {
- if ((inbufCount = in.read(inbuf)) == -1) {
- if (out.size() == 0)
- return null;
- if (blankline)
- addLine(pos, lines);
- return out.toByteArray();
+ private ByteArrayOutputStream out = new ByteArrayOutputStream(256);
+
+ private String encoding;
+
+ private boolean usingUTF8 = true;
+
+ private Map<String, Attributes.Name> attributeNames = new HashMap<String, Attributes.Name>();
+
+ private byte[] mainAttributesChunk;
+
+ InitManifest(InputStream is, Attributes main, Map entries, Map chunks,
+ String verString) throws IOException {
+ encoding = (String) AccessController.doPrivileged(new PriviAction(
+ "manifest.read.encoding"));
+ if ("".equals(encoding)) {
+ encoding = null;
+ }
+
+ Attributes current = main;
+ ArrayList<String> list = new ArrayList<String>();
+
+ // Return the chunk of main attributes in the manifest.
+ mainAttributesChunk = nextChunk(is, list);
+
+ Iterator it = list.iterator();
+ while (it.hasNext()) {
+ addAttribute((String) it.next(), current);
+ }
+
+ // Check for version attribute
+ if (verString != null && main.getValue(verString) == null) {
+ throw new IOException(Msg.getString("K0009", verString));
+ }
+
+ list.clear();
+ byte[] chunk = null;
+ while (chunks == null ? readLines(is, list) : (chunk = nextChunk(is,
+ list)) != null) {
+ it = list.iterator();
+ String line = (String) it.next();
+ if (line.length() < 7
+ || !line.substring(0, 5).toLowerCase().equals("name:")) {
+ throw new IOException(Msg.getString("K000a"));
+ }
+ // Name: length required space char
+ String name = line.substring(6, line.length());
+ current = new Attributes(12);
+ if (chunks != null) {
+ chunks.put(name, chunk);
+ }
+ entries.put(name, current);
+ while (it.hasNext()) {
+ addAttribute((String) it.next(), current);
+ }
+ list.clear();
+ }
+
+ }
+
+ byte[] getMainAttributesChunk() {
+ return mainAttributesChunk;
+ }
+
+ private void addLine(int length, List<String> lines) throws IOException {
+ if (encoding != null) {
+ lines.add(new String(buffer, 0, length, encoding));
+ } else {
+ if (usingUTF8) {
+ try {
+ if (charbuf.length < length) {
+ charbuf = new char[length];
+ }
+ lines.add(Util.convertUTF8WithBuf(buffer, charbuf, 0,
+ length));
+ } catch (UTFDataFormatException e) {
+ usingUTF8 = false;
+ }
+ }
+ if (!usingUTF8) {
+ if (charbuf.length < length) {
+ charbuf = new char[length];
+ }
+ // If invalid UTF8, convert bytes to chars setting the upper
+ // bytes to zeros
+ int charOffset = 0;
+ int offset = 0;
+ for (int i = length; --i >= 0;) {
+ charbuf[charOffset++] = (char) (buffer[offset++] & 0xff);
+ }
+ lines.add(new String(charbuf, 0, length));
+ }
+ }
+ }
+
+ private byte[] nextChunk(InputStream in, List<String> lines)
+ throws IOException {
+ if (inbufCount == -1) {
+ return null;
+ }
+ byte next;
+ int pos = 0;
+ boolean blankline = false, lastCr = false;
+ out.reset();
+ while (true) {
+ if (inbufPos == inbufCount) {
+ if ((inbufCount = in.read(inbuf)) == -1) {
+ if (out.size() == 0) {
+ return null;
+ }
+ if (blankline) {
+ addLine(pos, lines);
+ }
+ return out.toByteArray();
+ } else {
+ if (inbufCount == inbuf.length && in.available() == 0) {
+ /* KA000 = "line too long" */
+ throw new IOException(Msg.getString("KA000"));
+ }
+ }
+ inbufPos = 0;
+ }
+ next = inbuf[inbufPos++];
+ if (lastCr) {
+ if (next != '\n') {
+ inbufPos--;
+ next = '\r';
+ } else {
+ if (out.size() == 0) {
+ continue;
+ }
+ out.write('\r');
+ }
+ lastCr = false;
+ } else if (next == '\r') {
+ lastCr = true;
+ continue;
+ }
+ if (blankline) {
+ if (next == ' ') {
+ out.write(next);
+ blankline = false;
+ continue;
+ }
+ addLine(pos, lines);
+ if (next == '\n') {
+ out.write(next);
+ return out.toByteArray();
+ }
+ pos = 0;
+ } else if (next == '\n') {
+ if (out.size() == 0) {
+ continue;
+ }
+ out.write(next);
+ blankline = true;
+ continue;
+ }
+ blankline = false;
+ out.write(next);
+ if (pos == buffer.length) {
+ byte[] newBuf = new byte[buffer.length * 2];
+ System.arraycopy(buffer, 0, newBuf, 0, buffer.length);
+ buffer = newBuf;
+ }
+ buffer[pos++] = next;
+ }
+ }
+
+ private boolean readLines(InputStream in, List<String> lines)
+ throws IOException {
+ if (inbufCount == -1) {
+ return false;
+ }
+ byte next;
+ int pos = 0;
+ boolean blankline = false, lastCr = false;
+ while (true) {
+ if (inbufPos == inbufCount) {
+ if ((inbufCount = in.read(inbuf)) == -1) {
+ if (blankline) {
+ addLine(pos, lines);
+ }
+ return lines.size() != 0;
} else {
if (inbufCount == inbuf.length && in.available() == 0) {
/* KA000 = "line too long" */
throw new IOException(Msg.getString("KA000"));
- }
- }
- inbufPos = 0;
- }
- next = inbuf[inbufPos++];
- if (lastCr) {
- if (next != '\n') {
- inbufPos--;
- next = '\r';
- } else {
- if (out.size() == 0)
- continue;
- out.write('\r');
- }
- lastCr = false;
- } else if (next == '\r') {
- lastCr = true;
- continue;
- }
- if (blankline) {
- if (next == ' ') {
- out.write(next);
- blankline = false;
- continue;
- }
- addLine(pos, lines);
- if (next == '\n') {
- out.write(next);
- return out.toByteArray();
- }
- pos = 0;
- } else if (next == '\n') {
- if (out.size() == 0)
- continue;
- out.write(next);
- blankline = true;
- continue;
- }
- blankline = false;
- out.write(next);
- if (pos == buffer.length) {
- byte[] newBuf = new byte[buffer.length * 2];
- System.arraycopy(buffer, 0, newBuf, 0, buffer.length);
- buffer = newBuf;
- }
- buffer[pos++] = next;
- }
- }
-
- private boolean readLines(InputStream in, List<String> lines) throws IOException {
- if (inbufCount == -1)
- return false;
- byte next;
- int pos = 0;
- boolean blankline = false, lastCr = false;
- while (true) {
- if (inbufPos == inbufCount) {
- if ((inbufCount = in.read(inbuf)) == -1) {
- if (blankline)
- addLine(pos, lines);
- return lines.size() != 0;
- } else {
- if (inbufCount == inbuf.length && in.available() == 0) {
- /* KA000 = "line too long" */
- throw new IOException(Msg.getString("KA000"));
- }
- }
- inbufPos = 0;
- }
- next = inbuf[inbufPos++];
- if (lastCr) {
- if (next != '\n') {
- inbufPos--;
- next = '\r';
- }
- lastCr = false;
- } else if (next == '\r') {
- lastCr = true;
- continue;
- }
- if (blankline) {
- if (next == ' ') {
- blankline = false;
- continue;
- }
- addLine(pos, lines);
- if (next == '\n')
- return true;
- pos = 0;
- } else if (next == '\n') {
- if (pos == 0 && lines.size() == 0)
- continue;
- blankline = true;
- continue;
- }
- blankline = false;
- if (pos == buffer.length) {
- byte[] newBuf = new byte[buffer.length * 2];
- System.arraycopy(buffer, 0, newBuf, 0, buffer.length);
- buffer = newBuf;
- }
- buffer[pos++] = next;
- }
- }
-
- /* Get the next attribute and add it */
- private void addAttribute(String line, Attributes current)
- throws IOException {
- String header;
- int hdrIdx = line.indexOf(':');
- if (hdrIdx < 1)
- throw new IOException(Msg.getString("K000b", line));
- header = line.substring(0, hdrIdx);
- Attributes.Name name = (Attributes.Name) attributeNames.get(header);
- if (name == null) {
- try {
- name = new Attributes.Name(header);
- } catch (IllegalArgumentException e) {
- throw new IOException(e.toString());
- }
- attributeNames.put(header, name);
- }
- if (hdrIdx + 1 >= line.length() || line.charAt(hdrIdx + 1) != ' ')
- throw new IOException(Msg.getString("K000b", line));
- // +2 due to required SPACE char
- current.put(name, line.substring(hdrIdx + 2, line.length()));
- }
+ }
+ }
+ inbufPos = 0;
+ }
+ next = inbuf[inbufPos++];
+ if (lastCr) {
+ if (next != '\n') {
+ inbufPos--;
+ next = '\r';
+ }
+ lastCr = false;
+ } else if (next == '\r') {
+ lastCr = true;
+ continue;
+ }
+ if (blankline) {
+ if (next == ' ') {
+ blankline = false;
+ continue;
+ }
+ addLine(pos, lines);
+ if (next == '\n') {
+ return true;
+ }
+ pos = 0;
+ } else if (next == '\n') {
+ if (pos == 0 && lines.size() == 0) {
+ continue;
+ }
+ blankline = true;
+ continue;
+ }
+ blankline = false;
+ if (pos == buffer.length) {
+ byte[] newBuf = new byte[buffer.length * 2];
+ System.arraycopy(buffer, 0, newBuf, 0, buffer.length);
+ buffer = newBuf;
+ }
+ buffer[pos++] = next;
+ }
+ }
+
+ /* Get the next attribute and add it */
+ private void addAttribute(String line, Attributes current)
+ throws IOException {
+ String header;
+ int hdrIdx = line.indexOf(':');
+ if (hdrIdx < 1) {
+ throw new IOException(Msg.getString("K000b", line));
+ }
+ header = line.substring(0, hdrIdx);
+ Attributes.Name name = attributeNames.get(header);
+ if (name == null) {
+ try {
+ name = new Attributes.Name(header);
+ } catch (IllegalArgumentException e) {
+ throw new IOException(e.toString());
+ }
+ attributeNames.put(header, name);
+ }
+ if (hdrIdx + 1 >= line.length() || line.charAt(hdrIdx + 1) != ' ') {
+ throw new IOException(Msg.getString("K000b", line));
+ }
+ // +2 due to required SPACE char
+ current.put(name, line.substring(hdrIdx + 2, line.length()));
+ }
}
Modified: incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/JarEntry.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/JarEntry.java?rev=410555&r1=410554&r2=410555&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/JarEntry.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/JarEntry.java Wed May 31 08:03:48 2006
@@ -29,170 +29,172 @@
import javax.security.auth.x500.X500Principal;
public class JarEntry extends ZipEntry {
- private Attributes attributes;
+ private Attributes attributes;
- JarFile parentJar;
+ JarFile parentJar;
- Certificate certificates[];
+ Certificate certificates[];
- CodeSigner signers[];
+ CodeSigner signers[];
- // Cached factory used to build CertPath-s in <code>getCodeSigners()</code>.
- private CertificateFactory factory;
-
- private boolean isFactoryChecked = false;
-
- /**
- * Create a new JarEntry named name
- *
- * @param name
- * The name of the new JarEntry
- */
- public JarEntry(String name) {
- super(name);
- }
-
- /**
- * Create a new JarEntry using the values obtained from entry.
- *
- * @param entry
- * The ZipEntry to obtain values from.
- */
- public JarEntry(ZipEntry entry) {
- super(entry);
- }
-
- /**
- * Returns the Attributes object associated with this entry or null if none
- * exists.
- *
- * @return java.util.jar.Attributes Attributes for this entry
- * @exception java.io.IOException
- * If an error occurs obtaining the Attributes
- */
- public Attributes getAttributes() throws IOException {
- if (attributes != null || parentJar == null)
- return attributes;
- Manifest manifest = parentJar.getManifest();
- if (manifest == null)
- return null;
- return attributes = manifest.getAttributes(getName());
- }
-
- /**
- * Returns an array of Certificate Objects associated with this entry or
- * null if none exist.
- *
- * @return java.security.cert.Certificate[] Certificates for this entry
- */
- public Certificate[] getCertificates() {
- return certificates;
- }
-
- void setAttributes(Attributes attrib) {
- attributes = attrib;
- }
-
- /**
- * Create a new JarEntry using the values obtained from je.
- *
- * @param je
- * The JarEntry to obtain values from
- */
- public JarEntry(JarEntry je) {
- super(je);
- parentJar = je.parentJar;
- attributes = je.attributes;
- certificates = je.certificates;
- signers = je.signers;
-
- }
-
- /**
- * Returns the code signers for the jar entry. If there is no such code
- * signers, returns null. Only when the jar entry has been completely
- * verified by reading till the end of the jar entry, can the method be
- * called. Or else the method will return null.
- *
- * @return the code signers for the jar entry.
- */
- public CodeSigner[] getCodeSigners() {
- if (null == signers) {
- signers = getCodeSigners(certificates);
-
- }
- if (null == signers) {
- return null;
- }
-
- CodeSigner[] tmp = new CodeSigner[signers.length];
- System.arraycopy(signers, 0, tmp, 0, tmp.length);
- return tmp;
-
- }
-
- private CodeSigner[] getCodeSigners(Certificate[] certs) {
-
- X500Principal prevIssuer = null;
- ArrayList<Certificate> list = new ArrayList<Certificate>(certs.length);
- ArrayList<CodeSigner> asigners = new ArrayList<CodeSigner>();
-
- for (int i = 0; i < certs.length; i++) {
- if (!(certs[i] instanceof X509Certificate)) {
- // Only X509CErtificate-s are taken into account - see API spec.
- continue;
- }
- X509Certificate x509 = (X509Certificate) certs[i];
- if (null != prevIssuer) {
- X500Principal subj = x509.getSubjectX500Principal();
- if (!prevIssuer.equals(subj)) {
- // Ok, this ends the previous chain,
- // so transform this one into CertPath ...
- addCodeSigner(asigners, list);
- // ... and start a new one
- list.clear();
- }// else { it's still the same chain }
-
- }
- prevIssuer = x509.getIssuerX500Principal();
- list.add(x509);
- }
- if (!list.isEmpty()) {
- addCodeSigner(asigners, list);
- }
- if (asigners.isEmpty()) {
- // 'signers' is 'null' already
- return null;
- }
-
- CodeSigner[] tmp = new CodeSigner[asigners.size()];
- asigners.toArray(tmp);
- return tmp;
-
- }
-
- private void addCodeSigner(ArrayList<CodeSigner> asigners,
- List<Certificate> list) {
- CertPath certPath = null;
- if (!isFactoryChecked) {
- try {
- factory = CertificateFactory.getInstance("X.509");
- } catch (CertificateException ex) {
- // do nothing
- } finally {
- isFactoryChecked = true;
- }
- }
- if (null == factory) {
- return;
- }
- try {
- certPath = factory.generateCertPath(list);
- } catch (CertificateException ex) {
- // do nothing
- }
- if (null != certPath) {
- asigners.add(new CodeSigner(certPath, null));
- }
- }
+ // Cached factory used to build CertPath-s in <code>getCodeSigners()</code>.
+ private CertificateFactory factory;
+
+ private boolean isFactoryChecked = false;
+
+ /**
+ * Create a new JarEntry named name
+ *
+ * @param name
+ * The name of the new JarEntry
+ */
+ public JarEntry(String name) {
+ super(name);
+ }
+
+ /**
+ * Create a new JarEntry using the values obtained from entry.
+ *
+ * @param entry
+ * The ZipEntry to obtain values from.
+ */
+ public JarEntry(ZipEntry entry) {
+ super(entry);
+ }
+
+ /**
+ * Returns the Attributes object associated with this entry or null if none
+ * exists.
+ *
+ * @return java.util.jar.Attributes Attributes for this entry
+ * @exception java.io.IOException
+ * If an error occurs obtaining the Attributes
+ */
+ public Attributes getAttributes() throws IOException {
+ if (attributes != null || parentJar == null) {
+ return attributes;
+ }
+ Manifest manifest = parentJar.getManifest();
+ if (manifest == null) {
+ return null;
+ }
+ return attributes = manifest.getAttributes(getName());
+ }
+
+ /**
+ * Returns an array of Certificate Objects associated with this entry or
+ * null if none exist.
+ *
+ * @return java.security.cert.Certificate[] Certificates for this entry
+ */
+ public Certificate[] getCertificates() {
+ return certificates;
+ }
+
+ void setAttributes(Attributes attrib) {
+ attributes = attrib;
+ }
+
+ /**
+ * Create a new JarEntry using the values obtained from je.
+ *
+ * @param je
+ * The JarEntry to obtain values from
+ */
+ public JarEntry(JarEntry je) {
+ super(je);
+ parentJar = je.parentJar;
+ attributes = je.attributes;
+ certificates = je.certificates;
+ signers = je.signers;
+
+ }
+
+ /**
+ * Returns the code signers for the jar entry. If there is no such code
+ * signers, returns null. Only when the jar entry has been completely
+ * verified by reading till the end of the jar entry, can the method be
+ * called. Or else the method will return null.
+ *
+ * @return the code signers for the jar entry.
+ */
+ public CodeSigner[] getCodeSigners() {
+ if (null == signers) {
+ signers = getCodeSigners(certificates);
+
+ }
+ if (null == signers) {
+ return null;
+ }
+
+ CodeSigner[] tmp = new CodeSigner[signers.length];
+ System.arraycopy(signers, 0, tmp, 0, tmp.length);
+ return tmp;
+
+ }
+
+ private CodeSigner[] getCodeSigners(Certificate[] certs) {
+
+ X500Principal prevIssuer = null;
+ ArrayList<Certificate> list = new ArrayList<Certificate>(certs.length);
+ ArrayList<CodeSigner> asigners = new ArrayList<CodeSigner>();
+
+ for (Certificate element : certs) {
+ if (!(element instanceof X509Certificate)) {
+ // Only X509CErtificate-s are taken into account - see API spec.
+ continue;
+ }
+ X509Certificate x509 = (X509Certificate) element;
+ if (null != prevIssuer) {
+ X500Principal subj = x509.getSubjectX500Principal();
+ if (!prevIssuer.equals(subj)) {
+ // Ok, this ends the previous chain,
+ // so transform this one into CertPath ...
+ addCodeSigner(asigners, list);
+ // ... and start a new one
+ list.clear();
+ }// else { it's still the same chain }
+
+ }
+ prevIssuer = x509.getIssuerX500Principal();
+ list.add(x509);
+ }
+ if (!list.isEmpty()) {
+ addCodeSigner(asigners, list);
+ }
+ if (asigners.isEmpty()) {
+ // 'signers' is 'null' already
+ return null;
+ }
+
+ CodeSigner[] tmp = new CodeSigner[asigners.size()];
+ asigners.toArray(tmp);
+ return tmp;
+
+ }
+
+ private void addCodeSigner(ArrayList<CodeSigner> asigners,
+ List<Certificate> list) {
+ CertPath certPath = null;
+ if (!isFactoryChecked) {
+ try {
+ factory = CertificateFactory.getInstance("X.509");
+ } catch (CertificateException ex) {
+ // do nothing
+ } finally {
+ isFactoryChecked = true;
+ }
+ }
+ if (null == factory) {
+ return;
+ }
+ try {
+ certPath = factory.generateCertPath(list);
+ } catch (CertificateException ex) {
+ // do nothing
+ }
+ if (null != certPath) {
+ asigners.add(new CodeSigner(certPath, null));
+ }
+ }
}