aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Munro <tmunro@postgresql.org>2022-08-07 12:42:11 +1200
committerThomas Munro <tmunro@postgresql.org>2022-08-07 12:42:41 +1200
commitcbf4403134738245db48b306c62eb1258f2b2bd0 (patch)
tree8701627bd54d0a1fc23ac0180dc3608d019044f5
parent24c3ce8f1c707f9eeb1f68cebd44c2516ff799c2 (diff)
downloadpostgresql-cbf4403134738245db48b306c62eb1258f2b2bd0.tar.gz
postgresql-cbf4403134738245db48b306c62eb1258f2b2bd0.zip
Simplify replacement code for strtof.
strtof() is in C99 and all targeted systems have it. We can remove the configure probe and some dead code, but we still need replacement code for a couple of systems that have known buggy implementations selected via platform template. Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://postgr.es/m/152683.1659830125%40sss.pgh.pa.us
-rwxr-xr-xconfigure16
-rw-r--r--configure.ac4
-rw-r--r--src/include/pg_config.h.in3
-rw-r--r--src/include/port.h4
-rw-r--r--src/port/strtof.c38
-rw-r--r--src/tools/msvc/Solution.pm1
6 files changed, 2 insertions, 64 deletions
diff --git a/configure b/configure
index 0e73edb9ffa..5ee7c2c1a21 100755
--- a/configure
+++ b/configure
@@ -16734,19 +16734,6 @@ esac
fi
-ac_fn_c_check_func "$LINENO" "strtof" "ac_cv_func_strtof"
-if test "x$ac_cv_func_strtof" = xyes; then :
- $as_echo "#define HAVE_STRTOF 1" >>confdefs.h
-
-else
- case " $LIBOBJS " in
- *" strtof.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS strtof.$ac_objext"
- ;;
-esac
-
-fi
-
if test "$enable_thread_safety" = yes; then
@@ -16770,8 +16757,7 @@ if test "$PORTNAME" = "win32" -o "$PORTNAME" = "cygwin"; then
# Cygwin and (apparently, based on test results) Mingw both
# have a broken strtof(), so substitute its implementation.
# That's not a perfect fix, since it doesn't avoid double-rounding,
- # but we have no better options. To get that, though, we have to
- # force the file to be compiled despite HAVE_STRTOF.
+ # but we have no better options.
case " $LIBOBJS " in
*" strtof.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS strtof.$ac_objext"
diff --git a/configure.ac b/configure.ac
index efd3be91cd4..be52e17ea75 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1874,7 +1874,6 @@ AC_REPLACE_FUNCS(m4_normalize([
strlcat
strlcpy
strnlen
- strtof
]))
if test "$enable_thread_safety" = yes; then
@@ -1885,8 +1884,7 @@ if test "$PORTNAME" = "win32" -o "$PORTNAME" = "cygwin"; then
# Cygwin and (apparently, based on test results) Mingw both
# have a broken strtof(), so substitute its implementation.
# That's not a perfect fix, since it doesn't avoid double-rounding,
- # but we have no better options. To get that, though, we have to
- # force the file to be compiled despite HAVE_STRTOF.
+ # but we have no better options.
AC_LIBOBJ([strtof])
AC_MSG_NOTICE([On $host_os we will use our strtof wrapper.])
fi
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in
index 2d9a1cdc8ab..c243a906c9b 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -460,9 +460,6 @@
/* Define to 1 if you have the `strsignal' function. */
#undef HAVE_STRSIGNAL
-/* Define to 1 if you have the `strtof' function. */
-#undef HAVE_STRTOF
-
/* Define to 1 if the system has the type `struct addrinfo'. */
#undef HAVE_STRUCT_ADDRINFO
diff --git a/src/include/port.h b/src/include/port.h
index ad76384fb19..cec41eae713 100644
--- a/src/include/port.h
+++ b/src/include/port.h
@@ -387,10 +387,6 @@ extern int getpeereid(int sock, uid_t *uid, gid_t *gid);
extern void explicit_bzero(void *buf, size_t len);
#endif
-#ifndef HAVE_STRTOF
-extern float strtof(const char *nptr, char **endptr);
-#endif
-
#ifdef HAVE_BUGGY_STRTOF
extern float pg_strtof(const char *nptr, char **endptr);
#define strtof(a,b) (pg_strtof((a),(b)))
diff --git a/src/port/strtof.c b/src/port/strtof.c
index 314fcc9851f..21b3f8f7122 100644
--- a/src/port/strtof.c
+++ b/src/port/strtof.c
@@ -16,43 +16,7 @@
#include <float.h>
#include <math.h>
-#ifndef HAVE_STRTOF
-/*
- * strtof() is part of C99; this version is only for the benefit of obsolete
- * platforms. As such, it is known to return incorrect values for edge cases,
- * which have to be allowed for in variant files for regression test results
- * for any such platform.
- */
-
-float
-strtof(const char *nptr, char **endptr)
-{
- int caller_errno = errno;
- double dresult;
- float fresult;
-
- errno = 0;
- dresult = strtod(nptr, endptr);
- fresult = (float) dresult;
- if (errno == 0)
- {
- /*
- * Value might be in-range for double but not float.
- */
- if (dresult != 0 && fresult == 0)
- caller_errno = ERANGE; /* underflow */
- if (!isinf(dresult) && isinf(fresult))
- caller_errno = ERANGE; /* overflow */
- }
- else
- caller_errno = errno;
-
- errno = caller_errno;
- return fresult;
-}
-
-#elif HAVE_BUGGY_STRTOF
/*
* Cygwin has a strtof() which is literally just (float)strtod(), which means
* we can't avoid the double-rounding problem; but using this wrapper does get
@@ -119,5 +83,3 @@ pg_strtof(const char *nptr, char **endptr)
}
}
}
-
-#endif
diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index 4916a86f5cf..caacb965bbd 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -349,7 +349,6 @@ sub GenerateFiles
HAVE_STRLCPY => undef,
HAVE_STRNLEN => 1,
HAVE_STRSIGNAL => undef,
- HAVE_STRTOF => 1,
HAVE_STRUCT_ADDRINFO => 1,
HAVE_STRUCT_CMSGCRED => undef,
HAVE_STRUCT_OPTION => undef,