summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPádraig Brady <P@draigBrady.com>2014-12-10 16:26:27 +0000
committerPádraig Brady <P@draigBrady.com>2014-12-10 17:45:50 +0000
commitf57bfbb237ed11986af01e590acde49f52d49359 (patch)
treeea667dcb229b989fdfbc4717c763c9c29c96ee6a
parent5760532a2dcbad3569928f56a1d5d60d7282087c (diff)
downloadcoreutils-f57bfbb237ed11986af01e590acde49f52d49359.tar.xz
build: use the system printf routines in most cases
glibc <= 2.5 would crash when passed invalid long double values, therefore internal gnulib routines were used, essentially only by od, to output such invalid values. Later glibc versions don't crash, as per https://sourceware.org/bugzilla/show_bug.cgi?id=4586 and subsequently od was adjusted to use the system printf routines through the use of the ftoastr module with commit v8.7-22-ga71c22f. Consequently our testing of this feature was moot, and use of the gnulib printf replacement for printf(1), od(1) and error(3) etc. was redundant. * configure.ac (gl_printf_safe): Unset so that we don't check that "nan" is output for these long double values. * tests/misc/od-float.sh: Adjust all existing checks to fail if od exits with failure status (like crashing for example). Add a new case for one of the problematic invalid long double values for x86_64. We only check that od exits successfully at present, which may change if https://sourceware.org/bugzilla/show_bug.cgi?id=17661 is resolved.
-rw-r--r--configure.ac6
-rwxr-xr-xtests/misc/od-float.sh20
2 files changed, 23 insertions, 3 deletions
diff --git a/configure.ac b/configure.ac
index 0744964c3..f07803481 100644
--- a/configure.ac
+++ b/configure.ac
@@ -67,6 +67,12 @@ cu_have_perl=yes
case $PERL in *"/missing "*) cu_have_perl=no;; esac
AM_CONDITIONAL([HAVE_PERL], [test $cu_have_perl = yes])
+# Disable the checks for handling certain invalid long double values
+# since this results in always replacing the printf() implementation
+# (see https://sourceware.org/bugzilla/show_bug.cgi?id=17661) and
+# od (ftoastr) doesn't use the replacement anyway.
+m4_divert_text([INIT_PREPARE], [gl_printf_safe=''])
+
# gl_GCC_VERSION_IFELSE([major], [minor], [run-if-found], [run-if-not-found])
# ------------------------------------------------
# If $CPP is gcc-MAJOR.MINOR or newer, then run RUN-IF-FOUND.
diff --git a/tests/misc/od-float.sh b/tests/misc/od-float.sh
index 8a8e29b27..10ffc84cf 100755
--- a/tests/misc/od-float.sh
+++ b/tests/misc/od-float.sh
@@ -29,7 +29,7 @@ export LC_ALL=C
# on x86: sometimes there was no space between the columns.
set x $(echo aaaabaaa | tr ab '\376\377' | od -t fF) ||
- framework_failure_
+ fail=1
case "$*" in
*0-*) fail=1;;
esac
@@ -38,7 +38,7 @@ case $3,$4 in
esac
set x $(echo aaaaaaaabaaaaaaa | tr ab '\376\377' | od -t fD) ||
- framework_failure_
+ fail=1
case "$*" in
*0-*) fail=1;;
esac
@@ -47,7 +47,7 @@ case $3,$4 in
esac
set x $(echo aaaaaaaaaaaaaaaabaaaaaaaaaaaaaaa | tr ab '\376\377' | od -t fL) ||
- framework_failure_
+ fail=1
case "$*" in
*0-*) fail=1;;
esac
@@ -55,4 +55,18 @@ case $3,$4 in
-1.023442870282055988e+4855,-1.023442870282055988e+4855) fail=1;;
esac
+# Ensure od doesn't crash as it did on glibc <= 2.5:
+# https://sourceware.org/bugzilla/show_bug.cgi?id=4586
+set x $(printf 00000000ff000000 | tr 0f '\000\377' | od -t fL) || fail=1
+# With coreutils <= 8.7 we used to print "nan" for the above invalid value.
+# However since v8.7-22-ga71c22f we deferred to the system printf routines
+# through the use of the ftoastr module. So the following check would only
+# be valid on x86_64 if we again handle the conversion internally or
+# if this glibc bug is resolved:
+# https://sourceware.org/bugzilla/show_bug.cgi?id=17661
+#case "$*" in
+#*nan*) ;;
+#*) fail=1;;
+#esac
+
Exit $fail