aboutsummaryrefslogtreecommitdiffstats
path: root/missing
diff options
context:
space:
mode:
authorshyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-01-20 03:16:59 +0000
committershyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-01-20 03:16:59 +0000
commit782236e3bd5982930c22d3cf4955ec76474c8cec (patch)
treefa81b2fb7d4c4341125ccc830764c18da15339c9 /missing
parent76b609c8c3d4cae09e619aeee6ee5743a498fd3d (diff)
downloadruby-782236e3bd5982930c22d3cf4955ec76474c8cec.tar.gz
add missing/nan.c
instead of scattering #ifdef HAVE_NANF here and there define our own nan() unless defined elsewhere. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61971 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'missing')
-rw-r--r--missing/nan.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/missing/nan.c b/missing/nan.c
new file mode 100644
index 0000000000..507cc586d2
--- /dev/null
+++ b/missing/nan.c
@@ -0,0 +1,28 @@
+#include "ruby/missing.h"
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+double
+nan(const char *spec)
+{
+#if 0
+ /* FIXME: we have not yet seen any situation this is
+ * necessary. Please write a proper implementation that
+ * covers this branch. */
+ if (spec && spec[0]) {
+ double generated_nan;
+ int len = snprintf(NULL, 0, "NAN(%s)", spec);
+ char *buf = malloc(len + 1); /* +1 for NUL */
+ sprintf(buf, "NAN(%s)", spec);
+ generated_nan = strtod(buf, NULL);
+ free(buf);
+ return generated_nan;
+ }
+ else
+#endif
+ {
+ assert(!spec || !spec[0]);
+ return (double)NAN;
+ }
+}