aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorMark Anderson <mark@panonet.net>2005-04-02 01:18:45 +0000
committerTom Tromey <tromey@gcc.gnu.org>2005-04-02 01:18:45 +0000
commit9545f3a9332fae81336a901e3702c1bb92e14e09 (patch)
tree1107afaacc3de84f9c543f1f5b47ea68a0383ad2 /libjava
parent55b01ba091756b72782fe85f7678bf37903a2ff9 (diff)
downloadgcc-9545f3a9332fae81336a901e3702c1bb92e14e09.zip
gcc-9545f3a9332fae81336a901e3702c1bb92e14e09.tar.gz
gcc-9545f3a9332fae81336a901e3702c1bb92e14e09.tar.bz2
natDouble.cc (parseDouble): Handle NaN, Infinity and -Infinity as parameters.
2005-04-01 Mark Anderson <mark@panonet.net> * java/lang/natDouble.cc (parseDouble): Handle NaN, Infinity and -Infinity as parameters. From-SVN: r97424
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog5
-rw-r--r--libjava/java/lang/natDouble.cc19
2 files changed, 22 insertions, 2 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 3a928e51..50b0f95 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,8 @@
+2005-04-01 Mark Anderson <mark@panonet.net>
+
+ * java/lang/natDouble.cc (parseDouble): Handle NaN, Infinity and
+ -Infinity as parameters.
+
2005-04-01 Michael Koch <konqueror@gmx.de>
* java/io/PipedInputStream.java
diff --git a/libjava/java/lang/natDouble.cc b/libjava/java/lang/natDouble.cc
index dfec596..72fe5fb 100644
--- a/libjava/java/lang/natDouble.cc
+++ b/libjava/java/lang/natDouble.cc
@@ -1,6 +1,6 @@
// natDouble.cc - Implementation of java.lang.Double native methods.
-/* Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005 Free Software Foundation
This file is part of libgcj.
@@ -167,11 +167,15 @@ java::lang::Double::parseDouble(jstring str)
length--;
// The String could end with a f/F/d/D which is valid but we don't need.
+ bool saw_trailer = false;
if (length > 0)
{
jchar last = str->charAt(length-1);
if (last == 'f' || last == 'F' || last == 'd' || last == 'D')
- length--;
+ {
+ length--;
+ saw_trailer = true;
+ }
}
jsize start = 0;
@@ -186,6 +190,17 @@ java::lang::Double::parseDouble(jstring str)
jsize blength = _Jv_GetStringUTFRegion (str, start, length, data);
data[blength] = 0;
+ if (! saw_trailer)
+ {
+ if (! strcmp (data, "NaN") || ! strcmp (data, "+NaN")
+ || ! strcmp (data, "-NaN"))
+ return NaN;
+ else if (! strcmp (data, "Infinity") || ! strcmp (data, "+Infinity"))
+ return POSITIVE_INFINITY;
+ else if (! strcmp (data, "-Infinity"))
+ return NEGATIVE_INFINITY;
+ }
+
struct _Jv_reent reent;
memset (&reent, 0, sizeof reent);