summaryrefslogtreecommitdiff
path: root/include/ruby/missing.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/ruby/missing.h')
-rw-r--r--include/ruby/missing.h50
1 files changed, 37 insertions, 13 deletions
diff --git a/include/ruby/missing.h b/include/ruby/missing.h
index 5dba4edda7..4b88c9ea07 100644
--- a/include/ruby/missing.h
+++ b/include/ruby/missing.h
@@ -21,6 +21,9 @@ extern "C" {
#include "ruby/config.h"
#include <stddef.h>
#include <math.h> /* for INFINITY and NAN */
+#ifdef RUBY_ALTERNATIVE_MALLOC_HEADER
+# include RUBY_ALTERNATIVE_MALLOC_HEADER
+#endif
#ifdef RUBY_EXTCONF_H
#include RUBY_EXTCONF_H
#endif
@@ -34,6 +37,13 @@ extern "C" {
#endif
#endif
+#ifndef M_PI
+# define M_PI 3.14159265358979323846
+#endif
+#ifndef M_PI_2
+# define M_PI_2 (M_PI/2)
+#endif
+
#ifndef RUBY_SYMBOL_EXPORT_BEGIN
# define RUBY_SYMBOL_EXPORT_BEGIN /* begin */
# define RUBY_SYMBOL_EXPORT_END /* end */
@@ -126,24 +136,20 @@ RUBY_EXTERN double lgamma_r(double, int *);
RUBY_EXTERN double cbrt(double);
#endif
-#if !defined(INFINITY) || !defined(NAN)
+#if !defined(HAVE_INFINITY) || !defined(HAVE_NAN)
union bytesequence4_or_float {
unsigned char bytesequence[4];
float float_value;
};
#endif
-#ifdef INFINITY
-# define HAVE_INFINITY
-#else
+#ifndef INFINITY
/** @internal */
RUBY_EXTERN const union bytesequence4_or_float rb_infinity;
# define INFINITY (rb_infinity.float_value)
#endif
-#ifdef NAN
-# define HAVE_NAN
-#else
+#ifndef NAN
/** @internal */
RUBY_EXTERN const union bytesequence4_or_float rb_nan;
# define NAN (rb_nan.float_value)
@@ -156,6 +162,8 @@ RUBY_EXTERN const union bytesequence4_or_float rb_nan;
# include <ieeefp.h>
# endif
# define isinf(x) (!finite(x) && !isnan(x))
+# elif defined(__cplusplus) && __cplusplus >= 201103L
+# include <cmath> // it must include constexpr bool isinf(double);
# else
RUBY_EXTERN int isinf(double);
# endif
@@ -164,10 +172,25 @@ RUBY_EXTERN int isinf(double);
#ifndef isnan
# ifndef HAVE_ISNAN
+# if defined(__cplusplus) && __cplusplus >= 201103L
+# include <cmath> // it must include constexpr bool isnan(double);
+# else
RUBY_EXTERN int isnan(double);
+# endif
+# endif
+#endif
+
+#ifndef isfinite
+# ifndef HAVE_ISFINITE
+# define HAVE_ISFINITE 1
+# define isfinite(x) finite(x)
# endif
#endif
+#ifndef HAVE_NEXTAFTER
+RUBY_EXTERN double nextafter(double x, double y);
+#endif
+
/*
#ifndef HAVE_MEMCMP
RUBY_EXTERN int memcmp(const void *, const void *, size_t);
@@ -197,12 +220,6 @@ RUBY_EXTERN char *strerror(int);
RUBY_EXTERN char *strstr(const char *, const char *);
#endif
-/*
-#ifndef HAVE_STRTOL
-RUBY_EXTERN long strtol(const char *, char **, int);
-#endif
-*/
-
#ifndef HAVE_STRLCPY
RUBY_EXTERN size_t strlcpy(char *, const char*, size_t);
#endif
@@ -232,6 +249,13 @@ RUBY_EXTERN int ruby_close(int);
RUBY_EXTERN void setproctitle(const char *fmt, ...);
#endif
+#ifndef HAVE_EXPLICIT_BZERO
+RUBY_EXTERN void explicit_bzero(void *b, size_t len);
+# if defined SecureZeroMemory
+# define explicit_bzero(b, len) SecureZeroMemory(b, len)
+# endif
+#endif
+
RUBY_SYMBOL_EXPORT_END
#if defined(__cplusplus)