* a hammer. Therefore we need to catch potential overflows before
* it's too late. */
-#if ((defined(VMS) && !defined(__IEEE_FP)) || defined(_UNICOS)) && defined(NV_MAX_10_EXP)
+#if ((defined(VMS) && !defined(_IEEE_FP)) || defined(_UNICOS)) && defined(NV_MAX_10_EXP)
STMT_START {
const NV exp_v = log10(value);
if (exponent >= NV_MAX_10_EXP || exponent + exp_v >= NV_MAX_10_EXP)
PERL_ARGS_ASSERT_MY_ATOF;
if (PL_numeric_local && PL_numeric_radix_sv && IN_SOME_LOCALE_FORM) {
- char *standard = NULL, *local = NULL;
+ const char *standard = NULL, *local = NULL;
bool use_standard_radix;
+ /* Look through the string for the first thing that looks like a
+ * decimal point: either the value in the current locale or the
+ * standard fallback of '.'. The one which appears earliest in the
+ * input string is the one that we should have atof look for. Note that
+ * we have to determine this beforehand because on some systems,
+ * Perl_atof2 is just a wrapper around the system's atof. */
standard = strchr(s, '.');
local = strstr(s, SvPV_nolen(PL_numeric_radix_sv));