aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libjava/ChangeLog9
-rw-r--r--libjava/java/net/URLConnection.java35
2 files changed, 30 insertions, 14 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 7b3a486..45bc5ca 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,12 @@
+2004-07-21 Bryce McKinlay <mckinlay@redhat.com>
+
+ * java/net/URLConnection.java (position): New field.
+ (dateFormat1, dateFormat2, dateFormat3): Removed.
+ (dateFormats): New field.
+ (getHeaderFieldDate): Use new dateFormats array. Re-use parsePosition
+ each time instead of re-allocating.
+ (initializeDateFormats): Initialize 'dateFormats'.
+
2004-07-20 Bryce McKinlay <mckinlay@redhat.com>
PR libgcj/16591
diff --git a/libjava/java/net/URLConnection.java b/libjava/java/net/URLConnection.java
index 867a534..7b5f6a5 100644
--- a/libjava/java/net/URLConnection.java
+++ b/libjava/java/net/URLConnection.java
@@ -165,11 +165,12 @@ public abstract class URLConnection
protected URL url;
private static Hashtable handlers = new Hashtable();
- private static SimpleDateFormat dateFormat1;
- private static SimpleDateFormat dateFormat2;
- private static SimpleDateFormat dateFormat3;
+ private static SimpleDateFormat[] dateFormats;
private static boolean dateformats_initialized;
+ /* Cached ParsePosition, used when parsing dates. */
+ private ParsePosition position;
+
/**
* Creates a URL connection to a given URL. A real connection is not made.
* Use #connect to do this.
@@ -366,19 +367,24 @@ public abstract class URLConnection
{
if (! dateformats_initialized)
initializeDateFormats();
+
+ if (position == null)
+ position = new ParsePosition(0);
long result = defaultValue;
String str = getHeaderField(name);
if (str != null)
{
- Date date;
- if ((date = dateFormat1.parse(str, new ParsePosition(0))) != null)
- result = date.getTime();
- else if ((date = dateFormat2.parse(str, new ParsePosition(0))) != null)
- result = date.getTime();
- else if ((date = dateFormat3.parse(str, new ParsePosition(0))) != null)
- result = date.getTime();
+ for (int i = 0; i < dateFormats.length; i++)
+ {
+ SimpleDateFormat df = dateFormats[i];
+ position.setIndex(0);
+ position.setErrorIndex(0);
+ Date date = df.parse(str, position);
+ if (date != null)
+ return date.getTime();
+ }
}
return result;
@@ -1040,17 +1046,18 @@ public abstract class URLConnection
// We don't put these in a static initializer, because it creates problems
// with initializer co-dependency: SimpleDateFormat's constructors eventually
// depend on URLConnection (via the java.text.*Symbols classes).
- private synchronized void initializeDateFormats()
+ private static synchronized void initializeDateFormats()
{
if (dateformats_initialized)
return;
Locale locale = new Locale("En", "Us", "Unix");
- dateFormat1 =
+ dateFormats = new SimpleDateFormat[3];
+ dateFormats[0] =
new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss 'GMT'", locale);
- dateFormat2 =
+ dateFormats[1] =
new SimpleDateFormat("EEEE, dd-MMM-yy hh:mm:ss 'GMT'", locale);
- dateFormat3 = new SimpleDateFormat("EEE MMM d hh:mm:ss yyyy", locale);
+ dateFormats[2] = new SimpleDateFormat("EEE MMM d hh:mm:ss yyyy", locale);
dateformats_initialized = true;
}
}