From: Pádraig Brady
Date: Tue, 30 Jun 2015 23:10:23 +0000 (+0100)
Subject: numfmt: increase precision on 32 bit FreeBSD
X-Git-Tag: v8.24~8
X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=81c7fc4081df7cb59b55c5fde486687afd0c87d7;p=thirdparty%2Fcoreutils.git
numfmt: increase precision on 32 bit FreeBSD
* m4/jm-macros.m4 (HAVE_FPSETPREC): Define if needed.
* src/numfmt.c (main): Call fpsetprec() if needed.
Fixes large-15 and large-16 test failures on 32 bit FreeBSD.
---
diff --git a/m4/jm-macros.m4 b/m4/jm-macros.m4
index 79f124b019..51c533a42a 100644
--- a/m4/jm-macros.m4
+++ b/m4/jm-macros.m4
@@ -165,6 +165,21 @@ AC_DEFUN([coreutils_MACROS],
LIBS="$ac_seq_save_LIBS"
])
+
+ # See is fpsetprec() required to use extended double precision
+ # This is needed on 32 bit FreeBSD to give accurate conversion of:
+ # `numfmt 9223372036854775808`
+ AC_TRY_LINK([#include ],
+ [#ifdef __i386__
+ fpsetprec(FP_PE);
+ #else
+ # error not required on 64 bit
+ #endif
+ ], [ac_have_fpsetprec=yes], [ac_have_fpsetprec=no])
+ if test "$ac_have_fpsetprec" = "yes" ; then
+ AC_DEFINE([HAVE_FPSETPREC], 1, [whether fpsetprec is present and required])
+ fi
+
AC_REQUIRE([AM_LANGINFO_CODESET])
# Accept configure options: --with-tty-group[=GROUP], --without-tty-group
diff --git a/src/numfmt.c b/src/numfmt.c
index e58972bce6..35c5c5b97d 100644
--- a/src/numfmt.c
+++ b/src/numfmt.c
@@ -32,6 +32,10 @@
#include "gl_linked_list.h"
#include "gl_xlist.h"
+#if HAVE_FPSETPREC
+# include
+#endif
+
/* The official name of this program (e.g., no 'g' prefix). */
#define PROGRAM_NAME "numfmt"
@@ -1574,6 +1578,11 @@ main (int argc, char **argv)
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
+#if HAVE_FPSETPREC
+ /* Enabled extended precision if needed. */
+ fpsetprec (FP_PE);
+#endif
+
decimal_point = nl_langinfo (RADIXCHAR);
if (decimal_point == NULL || strlen (decimal_point) == 0)
decimal_point = ".";