perl.h - mingw-w64 builds use __mingw_strtold instead of strtold
authorsisyphus <sisyphus1@optusnet.com.au>
Wed, 1 Aug 2018 12:32:00 +0000 (22:32 +1000)
committerKarl Williamson <khw@cpan.org>
Thu, 9 Aug 2018 17:27:35 +0000 (11:27 -0600)
There are bugs in strtold().

James Keenan fixed a file permissions problem originally introduced by
this commit, but the fix has been squashed into it.

perl.h

diff --git a/perl.h b/perl.h
index 9bf47e4..66ebf20 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -6477,7 +6477,17 @@ expression, but with an empty argument list, like this:
 #ifdef USE_QUADMATH
 #  define Perl_strtod(s, e) strtoflt128(s, e)
 #elif defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE)
-#  if defined(HAS_STRTOLD)
+#  if defined(__MINGW64_VERSION_MAJOR) && defined(HAS_STRTOLD)
+      /***********************************************
+       We are unable to use strtold because of
+        https://sourceforge.net/p/mingw-w64/bugs/711/
+        &
+        https://sourceforge.net/p/mingw-w64/bugs/725/
+
+       but __mingw_strtold is fine.
+      ***********************************************/
+#    define Perl_strtod(s, e) __mingw_strtold(s, e)
+#  elif defined(HAS_STRTOLD)
 #    define Perl_strtod(s, e) strtold(s, e)
 #  elif defined(HAS_STRTOD)
 #    define Perl_strtod(s, e) (NV)strtod(s, e) /* Unavoidable loss. */