|
|
| Author |
Message |
|
| mdempsky |
Posted: Wed Jan 09, 2008 12:49 am |
|
|
|
User
Joined: 24 Sep 2007
Posts: 118
|
The code in unix/sys_float.c assumes that if strtod(3) sets errno to
ERANGE then there was a problem parsing the value. However, according
to POSIX, the actual indication of an error is that it also returned
0.0, HUGE_VAL, or -HUGE_VAL. This causes a problem on OS X 10.5 when
trying to read denormalized floating-point numbers because OS X's
strtod(3) implementation sets errno to ERANGE for denormals.
The patch below changes the errno check to be consistent with POSIX.
--- sys_float.c.orig 2008-01-02 10:38:16.000000000 -0800
+++ sys_float.c 2008-01-02 10:39:55.000000000 -0800
@@ -705,9 +705,7 @@
if (*s) /* That should be it */
return -1;
-#ifdef NO_FPE_SIGNALS
errno = 0;
-#endif
__ERTS_FP_CHECK_INIT(fpexnp);
*fp = strtod(buf, &t);
__ERTS_FP_ERROR_THOROUGH(fpexnp, *fp, return -1);
@@ -720,14 +718,14 @@
__ERTS_FP_ERROR_THOROUGH(fpexnp, *fp, return -1);
}
+ if ((*fp == 0.0 || *fp == HUGE_VAL || *fp == -HUGE_VAL) && errno
== ERANGE) {
#ifdef DEBUG
- if (errno == ERANGE)
fprintf(stderr, "errno = ERANGE in list_to_float\n\r");
#endif
#ifdef NO_FPE_SIGNALS
- if (errno == ERANGE)
return -1;
#endif
+ }
/*
** Replaces following code:
** if (errno == ERANGE) {
_______________________________________________
erlang-patches mailing list
erlang-patches@erlang.org
http://www.erlang.org/mailman/listinfo/erlang-patches
Post recived from mailinglist |
|
|
| Back to top |
|
|
|
All times are GMT
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You cannot download files in this forum
|
|
|